sed/awk:替换N次出现

Vit*_*liy 0 awk sed


它可以改变N(例如第二次出现)在文件使用一个行SED/AWK除了这样的方法?:

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
Run Code Online (Sandbox Code Playgroud)


谢谢

Fre*_*ihl 7

要更改行中的第N个出现,您可以使用:

$ echo foo bar foo bar foo bar foo bar | sed 's/foo/FOO/2'
foo bar FOO bar foo bar foo bar
Run Code Online (Sandbox Code Playgroud)

因此,您所要做的就是创建文本的"单行",例如使用 tr

tr '\n' ';'
Run Code Online (Sandbox Code Playgroud)

进行替换,然后再使用将其转换回多线

tr ';' '\n'
Run Code Online (Sandbox Code Playgroud)