2011-07-05 66 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