有此文件sed的附加行只
ServerName *
ServerAlias *
ServerAlias *
<Directory>
我想用文字S2 ServerAlias的第一次出現後追加一個新行。 我曾嘗試以下
sed '/ServerAlias/ a\S2\' foo
但所有出現在此之後追加。
我的最終結果應該是
ServerName *
ServerAlias *
S2
ServerAlias *
<Directory>
有此文件sed的附加行只
ServerName *
ServerAlias *
ServerAlias *
<Directory>
我想用文字S2 ServerAlias的第一次出現後追加一個新行。 我曾嘗試以下
sed '/ServerAlias/ a\S2\' foo
但所有出現在此之後追加。
我的最終結果應該是
ServerName *
ServerAlias *
S2
ServerAlias *
<Directory>
其實,這不是sed的,但也許AWK可以幫助你。
$> cat ./file
ServerName *
ServerAlias *
ServerAlias *
<Directory>
$> awk '{print} /^ServerAlias/ && !n {print "S2"; n++}' ./file
ServerName *
ServerAlias *
S2
ServerAlias *
<Directory>
UPD:現在的錯誤是固定的,由於glenn_jackman
上面的awk的解決方案是最好的,但如果你真的想這樣做的(GNU)的sed那麼下面的伎倆:
sed '0,/^ServerAlias.\+/s//\0\nS2/' file
積分爲the sed FAQ。
如果我多次重複命令,這是一些錯誤。可能它取決於操作系統。相反,我使用ServerName作爲目標,以後添加一個ServerAlias。 –
相關的潛在線結束問題:http://stackoverflow.com/questions/6111679/insert-linefeed-in-sed – cmbuckley
您可能需要錨定正則表達式以避免在註釋中匹配「ServerAlias」。 –
爲了避免兩次打印匹配的行,請使用:awk'{print}/^ ServerAlias/&&!n {print「S2」; n ++}'文件' –
已修復。感謝您的好評。 –