使用shell脚本

时间:2016-06-01 06:23:26

标签: bash shell awk sed

对于除我文件中第一行之外的每一行,我想检查一个字符串是否已经存在。如果确实如此,则什么也不做。否则,将字符串附加到行

对于前 - 我的文件中有3行

line1 : do_not_modify

line2-string-exists

line3

我想将-string-exists仅附加到文件中没有附加该字符串的那些行(忽略第一行)

输出应为 -

line1 : do_not_modify

line2-string-exists

line3-string-exists

请告诉我如何使用sed进行操作?或者是否可以使用awk

3 个答案:

答案 0 :(得分:4)

$ cat data
line1 : do_not_modify
line2-string-exists
line3

$ sed '1!{/-string-exists/! s/$/-string-exists/}' data
line1 : do_not_modify
line2-string-exists
line3-string-exists

或使用awk

$ awk '{if(NR!=1 && ! /-string-exists/) {printf "%s%s", $0, "-string-exists\n"} else {print}}' data
line1 : do_not_modify
line2-string-exists
line3-string-exists

答案 1 :(得分:1)

您可以使用此sed命令:

sed -E '/(do_not_modify|-string-exists)$/!s/$/-string-exists/' file

line1 : do_not_modify
line2-string-exists
line3-string-exists

或使用awk

awk '!/(do_not_modify|-string-exists)$/{$0 = $0 "-string-exists"} 1' file

答案 2 :(得分:0)

假设字符串不包含任何RE元字符:

$ awk 'BEGIN{s="-string-exists"} (NR>1) && ($0!~s"$"){$0=$0 s} 1' file
line1 : do_not_modify
line2-string-exists
line3-string-exists