使用 sed 替换字符串

Using sed to replace string

我有下面的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/-/[=12=]/'

它给了我

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

我正在使用 AIX 7.1 感谢任何帮助。

这一行可能会有所帮助:

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

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

以你的数据为例:

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

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

您可以试试下面的 sed 命令。

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

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

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