用sed替换字符串

时间:2015-02-26 13:34:41

标签: unix awk sed

我有以下txt

604024692;-27.34
500570067;-.0835
604013284;0.00006
603839102;-.1121

我希望它是:

604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121

但是当我跑到

以下时
sed 's/-/\0/'

它给了我

604024692;027.34
500570067;0.0835
604013284;0.00006
603839102;0.1121

我正在使用AIX 7.1 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

$ awk 'BEGIN{FS=OFS=";"} {$2=($2<0?-$2:$2)}1' file
604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121

答案 1 :(得分:1)

这个单行可能会有所帮助:

awk -F';' -v OFS=";" '{sub(/^-/,"0",$2);$2+=0}7' file

这个想法是,在替换之后,我们让awk处理前导零。

以您的数据为例:

kent$  cat f
604024692;-27.34
500570067;-.0835

kent$  awk -F';' -v OFS=";" '{sub(/^-/,"0",$2);$2+=0}7' f
604024692;27.34
500570067;0.0835

答案 2 :(得分:0)

您可以尝试以下sed命令。

$ sed 's/-//g;s/\(^\|;\)\./\10./g' file
604024692;27.34
500570067;0.0835

s/-//g,删除所有减号。 s/\(^\|;\)\./\10.匹配分号旁边的点或点旁边的点,并将匹配替换为组索引1中的字符加上数字0加上一个点。