2013-02-23 52 views
2

隨着sedread,你可以替換所有匹配開始與第二取代多達n次比賽

您可以結合與g(全局)標誌的編號。舉例來說,如果你想 獨自離開的第一個字,但改變第二,第三等被刪除 相反,使用/ 2G:

例如

sed 's/foo/bar/2g' a.txt 

但是怎麼可能你把替換成第二,這樣第三,第四等不會受到影響嗎?像

sed 's/foo/bar/1-2' a.txt 

回答

2

這可能爲你工作(GNU SED):

sed 's/foo/&\n/2;T;h;s//bar/g;G;s/\n.*\n//' file 

本身和一個換行符替換預期字符串的第n個occurence。 如果替換失敗,則將模式空間(PS)複製到保持空間(HS)。 使用替換字符串進行替換,然後用改變的行重新構建原始行。

另外:

sed 's/foo/\n/g;s/\n/foo/3g;s/\n/bar/g' file 

當第n +1使用1而不是到第n

0

最簡單的方法是什麼:

sed 's/foo/bar; s/foo/bar' a.txt 

這將有效地使取代的foo 2個第一個分身。它每行有兩次通過,始終替換第一次出現。由於第二次通過第一次foo已被替換,第二次通過將「原始」第二次出現視爲第一次。

0

延長Chirlo的答案...

replace_string=s/foo/bar 
n=2 
replace_string_n=`python -c 'print "'$replace_string';"*'$n` 

sed $replace_string_n a.txt