在匹配特定模式的情况下附加到行尾

时间:2018-05-17 10:29:51

标签: shell awk sed

File1中:

abcxyz 
b 
abcxyz 
abcxyz 
b 
c

OUTPUTFILE:

abcxyz 
b 
abcxyz someValueAddedHere 
abcxyz 
b 
c

sed '/^abcxyz/ s/$/ someValueAddedHere/2' File1

以上命令不适用于特定事件,适用于所有事件。需要处理指定的事件。

感谢您的编辑,祝您好日子

3 个答案:

答案 0 :(得分:1)

关注awk可能对您有所帮助。我在考虑你需要在Input_file中第二次出现abcxyz,你需要插入字符串。您也可以更改代码中出现的次数。

awk '/abcxyz/{count++} /abcxyz/ && count==2{print $0,"someValueAddedHere";next} 1'  Input_file

如果您需要将输出保存到Input_file本身,请将> tmp_file && mv tmp_file Input_file附加到上面的代码中。

答案 1 :(得分:1)

sed用于执行s/old/new/全部。在20世纪80年代中期,当awk被发明并且今天仅用于心理练习而不是用于解决问题的真正解决方案时,用于做其他任何事情的sed构造已经过时了,因为awk等价物总是会更有效,更便携的组合,更健壮,更简单,更清晰。

$ awk '/abcxyz/ && (++c == 2){$0 = $0 " someValueAddedHere"} 1' file
abcxyz
b
abcxyz  someValueAddedHere
abcxyz
b
c

答案 2 :(得分:0)

用sed进行心理锻炼

sed '
  /^abcxyz/!b
 :A
  $b
  N
  /\nabcxyz/!bA
  s/$/ someValueAddedHere/
 :B
  n
  bB
' File1

或者使用gnu sed

sed -z 's/\(\nabcxyz\)/& someValueAddedHere/' File1