Unix 使用sed替换字符串

Unix 使用sed替换字符串,unix,awk,sed,Unix,Awk,Sed,我有下面的文本 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.

我有下面的文本

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
我正在使用AIX7.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

这一行可能有助于:

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

您可以尝试下面的sed命令

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

s/-//g
,删除所有减号
s/\(^\\\)\/\10。
匹配起始处的点或分号旁边的点,并用组索引1内的字符加上数字
0
加上一个点替换匹配项。

您可以尝试下面的sed命令

$ sed 's/-//g;s/\(^\|;\)\./\10./g' file
604024692;27.34
500570067;0.0835
$ awk 'BEGIN{FS=OFS=";"} {$2=($2<0?-$2:$2)}1' file
604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121

s/-//g
,删除所有减号
s/\(^\\\\)\/\10。
匹配位于开始处的点或分号旁边的点,并用组索引1内的字符加上数字
0
加上一个点替换匹配项。

$awk'开始{FS=OFS=“;”}{$2=($2
$awk'开始{FS=OFS=“;”)“}{$2=($2tanks很多。它起了作用,但引入了另一个问题。我的文件中有
604013284;0.00006
,这个文件被转到
604013284;6e-05
,当你在这里提问时,请在问题中列出你的所有要求,不要把它们放在评论中。@Drsin和你使用的awk的哪个版本?在这里与gawk一起,
0.00006
)自动更改为
6e-05
。无论如何,您可以使用
printf“%g”输出
$2
,$2
来实现它。做一些测试,你会看到的。非常感谢。它成功了,但引入了另一个问题。我的文件中有
604013284;0.00006
,这被转到
604013284;6e-05
当你在这里提问时,请在问题中列出你的所有要求,不要把它们放在评论中。@Drsin和awk的哪个版本您在这里使用gawk时,
0.00006
已自动更改为
6e-05
。无论如何,您可以使用
printf“%g”输出
$2
,$2
来实现它。做一些你会看到的测试。@Raj,谢谢。你的测试也可以,但产生了另一个问题。我已经更新了我的初始帖子。请参见上文。@Drsin你的意思是什么?我的代码适用于上面更新的帖子input@Raj,谢谢。你的也可以,但产生了另一个问题。我已经更新了我的初始帖子。见上文。@Drsin你是什么意思?我的代码适用于上述更新的输入
$ awk 'BEGIN{FS=OFS=";"} {$2=($2<0?-$2:$2)}1' file
604024692;27.34
500570067;0.0835
604013284;0.00006
603839102;0.1121