如何使用sed替换文件中出现的第n个字符串

如何使用sed替换文件中出现的第n个字符串,sed,Sed,有没有办法用sed替换文件中出现的第n个字符串 如何更改它以替换第n个事件 我的文件内容包括以下几行: first line second line third line jack fifth line jack seventh line 考虑一个变量var=jill 我想用变量值$var替换第二次出现的jack,如果您想使用awk awk -v c="$var" '/jack/ && ++a==2 {sub(/jack/,c)}1' file first line

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

如何更改它以替换第n个事件

我的文件内容包括以下几行:

first line 
second line 
third line
 jack
fifth line 
jack
 seventh line
考虑一个变量
var=jill


我想用变量值
$var

替换第二次出现的jack,如果您想使用
awk

awk -v c="$var" '/jack/ && ++a==2 {sub(/jack/,c)}1' file
first line
second line
third line
 jack
fifth line
jill
 seventh line
这可能适用于您(GNU-sed):


这会将文件拖到内存中,然后将第二次出现的
jack
替换为
$var

,如果我想在第二次出现的jack中插入取自变量的jill,命令将如何执行,使其看起来像jajillck?@subhashnerella这会将输入一分为二,并在两者之间添加一个字符串:
echo“jack”{s=length($1)/2;print substr($1,0,s)“jill”substr($1,s+1)}
非常感谢它的有效性:)你能解释一下这个东西在做什么吗:a;$!{N;ba}@subhashnerella在不知道$var持有什么的情况下,我只能猜测所有的斜杠都需要预先加一个反斜杠。在您的评论中,
不是。如果斜杠在模式和替换中是前置的,则最好使用替代分隔符,例如
#
@subhashnerella
:a;$!{N;ba}将整个文件读入模式空间。
sed ':a;$!{N;ba};s/jack/'"$var"'/2' file