可以使用单行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
感谢
答案 0 :(得分:7)
要更改行中的第N个出现,您可以使用:
$ 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'
答案 1 :(得分:2)
这个awk解决方案假定每行只发生一次WHAT_TO_CHANGE。以下将第二个'one'替换为'TWO':
awk -v n=2 '/one/ { if (++count == n) sub(/one/, "TWO"); } 1' file.txt