2015-03-30 44 views
1

我想在文件中的特定單詞之後添加一些單詞。sed命令在特定工作後爲第一次發生添加文本

例子:

flags:ia 
minfree:5 
naflags:ia 

我想補充,滷味,廣告,FD,FM,-all後的 「標誌:IA」 我用下面請參閱命令:

sudo sed -i.bak "s/flags:ia[^)]*/&,lo,ad,fd,fm,-all/" /etc/security/audit_control 

然而,我的輸出結束了;

flags:ia,lo,ad,fd,fm,-all 
minfree:5 
naflags:ia,lo,ad,fd,fm,-all 

我怎樣才能使它隻影響「標誌:」而不是「naflags:」?

+0

在行的開頭固定搜索模式:'s/^ flags [etc.]',領先的'^'是你追求的。 – jthill 2015-03-30 23:44:56

回答

1

您需要使用\0而不是&解決置換方式目前比賽:

sudo sed -i.bak 's/^flags:ia[^)]*/\0,lo,ad,fd,fm,-all/' /etc/security/audit_control 

我不知道爲什麼你正在使用[^)]*。這可能取決於您的實際輸入數據。只知道你在問題中顯示的輸入,我會預期[^[:space:]]*,或者沒有那樣的。


對於OSX用戶。原來,上述命令不起作用OSX(我不能測試這個,因爲我使用Linux)。但是,我們可以在下面的評論中找到以下命令:

sed '/^flags:ia[^)]*/s/$/,lo,ad,fd,fm,-all/' input.file 
+0

sudo sed -i.bak「s/flags:ia [^)] */\ 0,lo,ad,fd,fm,-all /」/ etc/security/audit_control 似乎無法正常工作, 「flags:ia」帶「0」 – Technic1an 2015-03-30 23:14:46

+0

哦,我明白了。我們需要使用單引號..(從問題中複製)。否則shell會吃'\\\'..你現在可以檢查它是否適用於你嗎? – hek2mgl 2015-03-30 23:15:29

+0

仍然無法正常工作,我也使用OSX,如果這有所作爲。 – Technic1an 2015-03-30 23:20:10