如何使用sed替换第n个字符串

Rao*_*oul 17 sed

有没有办法用sed替换文件中第n个字符串?

sed -i '0,/jack.*/ s//jill/'用来替换第一次出现.

我怎样才能改变它以取代第n次出现?

我的文件内容如下:

first line
second line
third line
jack=1
fifth line
jack=
seventh line
Run Code Online (Sandbox Code Playgroud)

我不知道之后的价值jack=,它可以是任何东西或什么也不是.

我想替换第二次出现jack=以及随后出现的任何内容jill.

dog*_*ane 22

首先用文件中任何其他位置(例如^)使用的唯一字符替换所有换行符tr.您需要这样做才能为其创建单个字符串sed.然后传递给它sed并告诉它替换你的字符串的第n次出现.最后,将输出传递回来tr重新创建换行符.

对于n = 2,命令为:

$ tr '\n' '^' < file | sed 's/jack/jill/2' | tr '^' '\n'
first line
second line
third line
jack
fifth line
jill
seventh line
Run Code Online (Sandbox Code Playgroud)

更新:

也可以sed使用以下命令在不更改新行的情况下完成它:

$ sed ':a;N;$!ba;s/jack/jill/2' file
Run Code Online (Sandbox Code Playgroud)

或者,使用awk:

$ awk '/jack/{c+=1}{if(c==2){sub("jack","jill",$0)};print}' file
Run Code Online (Sandbox Code Playgroud)

  • 尝试:`sed':a; N; $!ba; s/jack [^ \n]*/jill/2'file` (4认同)