对于除我文件中第一行之外的每一行,我想检查一个字符串是否已经存在。如果确实如此,则什么也不做。否则,将字符串附加到行
对于前 - 我的文件中有3行
line1 : do_not_modify
line2-string-exists
line3
我想将-string-exists
仅附加到文件中没有附加该字符串的那些行(忽略第一行)
输出应为 -
line1 : do_not_modify
line2-string-exists
line3-string-exists
请告诉我如何使用sed
进行操作?或者是否可以使用awk
?
答案 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