Bash - 使用通配符删除字符后的所有文本
Bash - Remove all text after characters using wildcards
我看到 this SO answer 展示了如何删除 Bash 中字符串中某个字符后的所有文本。有了这些信息,我可以做这样的事情来舍入一个数字:
NUMBER=10.12345
NUMBER=${NUMBER%.*} # 10
但是,我想保留小数点后两位数。我怎样才能让 10.12345
变成 10.12
?我不需要正确舍入,只需 trim。也许在 运行 ${NUMBER%.*}
?
时带有通配符
您可以使用 printf
舍入浮点数。尝试 printf "%.2f" "${NUMBER}"
。您也可以将该值保存到变量中:printf -v myvar "%.2f" "${NUMBER}"
.
使用 =~
运算符:
$ num=10.12345
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10.12
$ num=10
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10
我看到 this SO answer 展示了如何删除 Bash 中字符串中某个字符后的所有文本。有了这些信息,我可以做这样的事情来舍入一个数字:
NUMBER=10.12345
NUMBER=${NUMBER%.*} # 10
但是,我想保留小数点后两位数。我怎样才能让 10.12345
变成 10.12
?我不需要正确舍入,只需 trim。也许在 运行 ${NUMBER%.*}
?
您可以使用 printf
舍入浮点数。尝试 printf "%.2f" "${NUMBER}"
。您也可以将该值保存到变量中:printf -v myvar "%.2f" "${NUMBER}"
.
使用 =~
运算符:
$ num=10.12345
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10.12
$ num=10
$ [[ $num =~ ^[0-9]*(.[0-9]{1,2})? ]] && echo $BASH_REMATCH
10