我有一个具有以下格式的文件:
A 485C72F95C72E15C EXTERNAL
B CC32480A3247F84A SYSTEM
C EC2A63F12A63B76C EXTERNAL
我想使用变量“字母”的值在第一列中提供字母,并用变量“ id”中提供的值替换第二列中的值。第三列在任何情况下都可以相同或不同。第一和第二列将永远不会包含空格或特殊字符。
我尝试使用sed
,但我的sed-fu不强。我想出了这个:
letter=A
id=MYNEWIDSTRING
sed "/$letter /s/[^ ]*/$id/2"
输出为:
A MYNEWIDSTRING EXTERNAL
B MYNEWIDSTRING SYSTEM
C EC2A63F12A63B76C EXTERNAL
id被替换为两行,我假设这是由于'A'在原始id字符串的末尾匹配。
我知道可以sed -i
就地编辑文件,但现在还不做,因为我的命令仍然有些晦涩。
我在哪里弄错了,还是应该使用其他方法?
锚定它(^
是行首),以便A
仅在第一个字符时匹配:
$ letter=A; id=MYNEWIDSTRING; sed "/^$letter /s/[^ ]*/$id/2" file
A MYNEWIDSTRING EXTERNAL
B CC32480A3247F84A SYSTEM
C EC2A63F12A63B76C EXTERNAL
顺便说一句,如果要将变量传递给sed
但需要强引号,请记住,可以在为变量添加双引号的同时打开或关闭引号-丑陋,但通常可能是最佳实践:
sed '/^'"$letter"' /s/[^ ]*/'"$id"'/2'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句