2017-08-07 63 views

回答

0

使用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 
+0

@Khalid:這是否工作? – anubhava

2

隨着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 
+1

您也可以使用'n'跳過'#'行:''/ ^#/ n;/pattern/a ...'如果您有大量正則表達式都需要跳過註釋行,這會很有幫助。用'n'跳過註釋,然後其餘的正則表達式不必擔心註釋。 – stevesliva

+0

這將是一個巧妙的改進。感謝您的反饋! – archemiro

1

嘗試以下也一次。

awk '/pattern/ && !/#/{print $0 ORS "NEW LINE HERE";next} 1' Input_file 
1

另一種方法使用sed:

sed 's/^pattern.*/&\nNEW LINE HERE/' file 

替換開頭的行pattern,接着用新行(\n)和所希望的字符串匹配線(&)。

+1

非常簡單直接的++。我認爲唯一的缺點是,只有在模式開始的時候纔會起作用。是對的嗎? – archemiro

+0

你說得對。該錨可以用您的模式'^ [^#] *'替換。 – SLePort

相關問題