我有一个字符串,我必须根据情况转换为int或float:
What I have => What I want
"548189848.54" => "548189848.54"
"548189848.50" => "548189848.5"
"548189848.00" => "548189848"
"0.0000" => "0"
我怎样才能使用sed?
谢谢,
史蒂夫
答案 0 :(得分:4)
您可以使用两个sed
表达式,一个用于在点后跟踪零,另一个用于非零数字后的表达式。它们是完全不同的,因为在前一种情况下你也必须删除点。
此解决方案适用于同一行中的任意数量的erm ...数字,并且不会从整数中删除尾随零,因为这会更改值。
我使用的是仅限GNU的-r
正则表达方言。
sed -r -e 's/([0-9]+)\.0+\b/\1/g' -e 's/([0-9]+\.[0-9]*[1-9])0+\b/\1/g'
或
sed -r 's/([0-9]+)\.0+\b/\1/g;s/([0-9]+\.[0-9]*[1-9])0+\b/\1/g'
第一个正则表达式解释说:
第二个正则表达式解释
答案 1 :(得分:2)
使用awk
:
$ cat file
548189848.54
548189848.50
548189848.00
0.0000
$ awk '{gsub(/\.?0+$/,"")}1' file
548189848.54
548189848.5
548189848
0
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/(\.0+|(\.[0-9]*[1-9])0+)\b/\2/' file
答案 3 :(得分:0)
echo "$YourString" | sed 's/0*$"//;s/[.]$//'
假设没有没有小数部分的数字