我有数字的可变数据,减去" [ - ]"," [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完成吗?
答案 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
222<word-boundary> --> .222
<non-word-boundary>.222 --> 0.222