sed / awk:替换N次出现

时间:2011-07-05 16:52:03

标签: 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


感谢

2 个答案:

答案 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