它可以改变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
由于
它可以改变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
由于
要改变第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'
这个awk解决方案假定WHAT_TO_CHANGE每行只出现一次。以下替换“二”第二“一”:
awk -v n=2 '/one/ { if (++count == n) sub(/one/, "TWO"); } 1' file.txt
感谢,这也适用不错 – Vitaliy
谢谢,好招用TR - 因为没有这种“S /富/ FOO/2'不适合我 – Vitaliy