2011-07-05 95 views
0


它可以改變N(例如第二次出現)在文件使用一個行SED/AWK除了這樣的方法?:
SED/AWK:代替n發生

line_num=`awk '/WHAT_TO_CHANGE/ {c++; if (c>=2) {c=NR;exit}}END {print c}' INPUT_FILE` && sed "$line_num,$ s/WHAT_TO_CHANGE/REPLACE_TO/g" INPUT_FILE > OUTPUT_FILE 


由於

回答

7

要改變第N occurence在一條線上,你可以使用這個:

$ echo foo bar foo bar foo bar foo bar | sed 's/foo/FOO/2' 
foo bar FOO bar foo bar foo bar 

因此,所有你需要做的就是創建一個你的文本的「單行」,例如使用tr

tr '\n' ';' 

做你的更換,然後將其轉換回一個多再次使用

tr ';' '\n' 
+0

謝謝,好招用TR - 因爲沒有這種「S /富/ FOO/2'不適合我 – Vitaliy

1

這個awk解決方案假定WHAT_TO_CHANGE每行只出現一次。以下替換「二」第二「一」:

awk -v n=2 '/one/ { if (++count == n) sub(/one/, "TWO"); } 1' file.txt 
+0

感謝,這也適用不錯 – Vitaliy