2010-08-30 29 views
2

第一字符串添加單詞,我有以下文件SED +匹配線以及符合

more file 
    machine1 network netmask broadcast 

如何在具有「網絡掩碼廣播」行的第一個字後添加「_NAME」字?

句話的sed也只需匹配「網絡掩碼廣播」,然後_NAME添加到第一個字線

例如:什麼,我需要得到後執行sed命令

machine1_NAME network netmask broadcast 

回答

3

這應該工作,因爲我們沒有使用g改性劑,它只會每行

sed -e 's/^[^ ]*\>/&_NAME/' 

它匹配非空格字符匹配一旦達到第一個字博用其自身替換,並追加_NAME。如前所述,如果沒有g修飾符,它只會每行匹配一次,並且如果行上有空白,請刪除第一個^ -anchor。

編輯
你只希望它匹配特定的線路,所以這裏有雲:

sed -e '/network netmask broadcast$/s/^[^ ]*\>/&_NAME/' 

第一部分是一個選擇,這可以確保替代僅在線路,其中network netmask broadcast兩端進行該線。爲了使它與任何行匹配,只需刪除$ -anchor,然後將*(space-asterisk)添加到空格以使其變得靈活。但你可能已經知道.. :)

1
sed '/network.*netmask.*broadcast/s|^\([ \t]*\)\(.[^ \t]*\) |\1\2_NAME|' file 
+0

@roe:某些版本的'sed'不需要'-e'。 – 2010-08-30 15:46:41

+0

@roe:除非你知道你在做什麼,否則不要編輯 – ghostdog74 2010-08-30 16:10:20

+0

對不起,我只是想幫助,-e從來沒有錯,但它可能是不正確的不使用它,即使用它會幾乎總是比較安全。我的錯。 – falstro 2010-08-30 17:54:34