如何使用sed替换文件中出现的第n个字符串
有没有办法用sed替换文件中出现的第n个字符串 如何更改它以替换第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
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