有没有办法用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)