2013-07-04 90 views
1

我該怎麼做?我有多個例如foob​​ar模式在我的文件中,如何添加後,例如第4個some_text?使用sed在第N個匹配模式後插入一些文本

+0

所以你想要做的插入/對整個文件的第n次出現更換?例如。一行可以有任意數量的「foobar」 – Kent

+0

@kent:每行只包含一個foobar,但整個文件包含很多。 –

回答

1

以下是否適合您?

sed ':a;$!{N;ba};s/\(foobar\)/\1\nsome_text/4' inputfile 

對於輸入:

$ cat inputfile 
line 
foobar 
foobar 
foobar 
line 
foobar 
line 
foobar 
line 
foobar 
line 

這將產生

$ sed ':a;$!{N;ba};s/\(foobar\)/\1\nsome_text/4' inputfile 
line 
foobar 
foobar 
foobar 
line 
foobar 
some_text 
line 
foobar 
line 
foobar 
line 

使用FreeBSD上-e

sed -e :a -e '$!N' -e '$!ba' -e 's/\(foobar\)/\1\nsome_text/4' inputfile 
+0

此錯誤: sed:1:「:a; $!{N; ba}; s/\(foobar \ ...」:未使用的標籤'a; $!{N; ba}; s/\(foobar \)/ \ 1 \ nsome_text/4' –

+0

你有GNU sed嗎? – devnull

+0

我使用的是FreeBSD –

1

一個awk版本:

awk '/foo/{x++} x==4{sub(/foo/,"&some_text")}1' file 

例如:

kent$ cat file 
foo 
foo 
trash 
foo 
trash 
foo 
foo 
foo 

kent$ awk '/foo/{x++} x==4{sub(/foo/,"&some_text")}1' file 
foo 
foo 
trash 
foo 
trash 
foosome_text 
foo 
foo 
相關問題