使用模式X.XXX修改数字

时间:2015-04-17 12:01:38

标签: sed

我有数字的可变数据,减去" [ - ]"," [0-9]"。它可能是:

source NUMBER  ->result NUMBER AFTER MODIFY  
XXX ->0.XXX,
XXXX ->X.XXX,
XXXXX ->XX.XXX,
-XXX -> -0.XXX,
-XXXX ->-X.XXX,
-XXXXX ->-XX.XXX,

这可以用sed完成吗?

3 个答案:

答案 0 :(得分:3)

我说:

sed -r 's/[0-9]{3}$/.&/; s/^(-?)\./\10./' filename

那是:

s/[0-9]{3}$/.&/    # put a dot before the last three digits in a line
s/^(-?)\./\10./    # if the result of this begins with . or -., insert a 0
                   # before the .

-r需要GNU sed。如果您使用BSD sed附带的BSD或Mac OS X,您可以使用

sed 's/[0-9]\{3\}$/.&/;s/^\(-\?\)\./\10./' filename

与基本的,而不是扩展的正则表达式语法相同。

附录:来想一想,这看起来相当于

awk '{ printf("%.3f\n", $0 / 1000) }' filename

答案 1 :(得分:0)

sed 's/\(-*\)\(.*\)\(...\)/\10\2.\3/;s/0\([1-9]\)/\1/' YourFile

另一种方法,如果需要,删除0,不带后退参考

答案 2 :(得分:0)

perl -pe 's/(\d{3})\b/.$1/;          
          s/\B\./0./'   file     
  • 第1行:222<word-boundary> --> .222
  • 第2行:<non-word-boundary>.222 --> 0.222