我想在模式匹配後插入一行並忽略使用sed
的Bash shell中的任何註釋行(以'#'開頭)。Sed,在模式匹配後插入一行並忽略任何註釋行,並使用#
下面是一個例子:將一個新行pattern
後:
輸入文件:
foo
Art
street
#pattern
foo
pattern
color
輸出:
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color
我想在模式匹配後插入一行並忽略使用sed
的Bash shell中的任何註釋行(以'#'開頭)。Sed,在模式匹配後插入一行並忽略任何註釋行,並使用#
下面是一個例子:將一個新行pattern
後:
輸入文件:
foo
Art
street
#pattern
foo
pattern
color
輸出:
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color
使用awk
:
awk -v line='NEW LINE HERE' -v pat='pattern' '1; $0 ~ pat && !/^[ \t]*#/{print line}' file
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color
隨着sed
:
$ cat file
foo
Art
street
#pattern
foo
pattern
color
$ sed '/^[^#]*pattern/ a NEW LINE HERE' file
foo
Art
street
#pattern
foo
pattern
NEW LINE HERE
color
您也可以使用'n'跳過'#'行:''/ ^#/ n;/pattern/a ...'如果您有大量正則表達式都需要跳過註釋行,這會很有幫助。用'n'跳過註釋,然後其餘的正則表達式不必擔心註釋。 – stevesliva
這將是一個巧妙的改進。感謝您的反饋! – archemiro
嘗試以下也一次。
awk '/pattern/ && !/#/{print $0 ORS "NEW LINE HERE";next} 1' Input_file
@Khalid:這是否工作? – anubhava