Sed 替换第n行搜索结果

Sed 替换第n行搜索结果,sed,text-processing,Sed,Text Processing,我想替换除第一个结果之外的所有结果 我有一个txt文件: AAA BBB CCC AAA BBB CCC AAA BBB CCC 我想得到这个: AAA BBB <-- stay same CCC AAA XXX <-- 2nd find replaced CCC AAA XXX <-- 3rd and nth find replaced CCC 使用分支: sed -e'/BBB/ {ba};b; :a {n;s/BBB/XXX/;ba}' 也就是说,在第一个BBB上

我想替换除第一个结果之外的所有结果

我有一个txt文件:

AAA
BBB
CCC
AAA
BBB
CCC
AAA
BBB
CCC
我想得到这个:

AAA
BBB <-- stay same
CCC
AAA
XXX <-- 2nd find replaced
CCC
AAA
XXX <-- 3rd and nth find replaced
CCC
使用分支:

sed -e'/BBB/ {ba};b; :a {n;s/BBB/XXX/;ba}' 
也就是说,在第一个BBB上,我们分支到
:a
,否则
b
无参数开始下一行的处理

:a
下,我们读到一行新内容,将所有
BBB
替换为
XXX
,并再次分支到
a

使用分支:

sed -e'/BBB/ {ba};b; :a {n;s/BBB/XXX/;ba}' 
也就是说,在第一个BBB上,我们分支到
:a
,否则
b
无参数开始下一行的处理


:a
下,我们阅读了一行新内容,将所有
BBB
替换为
XXX
并再次分支到
a

下面的
awk
也可能对您有所帮助

awk '{++a[$0];$0=$0=="AAA"&&(a[$0]==2||a[$0]==3)?$0 ORS "XXX":$0} 1' Input_file

以下
awk
也可能对您有所帮助

awk '{++a[$0];$0=$0=="AAA"&&(a[$0]==2||a[$0]==3)?$0 ORS "XXX":$0} 1' Input_file
$#替换大于s的所有引用
$#使用gsub而不是sub替换行中的所有引用
$#整行:awk-vs=1'$0==“AAA”&&++c>s{$0=“XXX”}1'ip.txt
$awk-vs=1'/AAA/&&++c>s{sub(/AAA/,“XXX”)}1'ip.txt
AAA
BBB
CCC
XXX
BBB
CCC
XXX
BBB
CCC
$#恰好在事件==s时替换
$awk-vs=2'/AAA/&&++c==s{sub(/AAA/,“XXX”)}1'ip.txt
AAA
BBB
CCC
XXX
BBB
CCC
AAA
BBB
CCC
进一步阅读:

$#替换所有大于s的引用
$#使用gsub而不是sub替换行中的所有引用
$#整行:awk-vs=1'$0==“AAA”&&++c>s{$0=“XXX”}1'ip.txt
$awk-vs=1'/AAA/&&++c>s{sub(/AAA/,“XXX”)}1'ip.txt
AAA
BBB
CCC
XXX
BBB
CCC
XXX
BBB
CCC
$#恰好在事件==s时替换
$awk-vs=2'/AAA/&&++c==s{sub(/AAA/,“XXX”)}1'ip.txt
AAA
BBB
CCC
XXX
BBB
CCC
AAA
BBB
CCC

进一步阅读:

< P>只要您的文件不包含<代码> NUL> <代码>字符(<代码> 0</>代码>),您就可以通过使用SED SECH使用“空char <代码> > 0代码/>代码,而不是默认的<代码> \n>代码>使用SED选项<代码> -Z >:

,将SED欺骗为整个文件,将其视为大字符串。
$ sed -z 's/BBB/XXX/2g' file66
AAA
BBB
CCC
AAA
XXX
CCC
AAA
XXX
CCC
/2g
结尾表示从第二次匹配开始,然后是全局匹配


您可以毫无问题地将
-i
-z
组合。

只要您的文件不包含
null
字符(
\0
)您可以通过将SED用NULL char <代码> > 0“/CODE”而不是默认的<代码> \n>代码>使用SED选项<代码> -Z :

,将SED视为整个字符串,将其视为大字符串。
$ sed -z 's/BBB/XXX/2g' file66
AAA
BBB
CCC
AAA
XXX
CCC
AAA
XXX
CCC
/2g
结尾表示从第二次匹配开始,然后是全局匹配


您可以毫无问题地将
-i
-z
组合。

我已编辑了问题的答案。。。若要指示已解决的状态,请通过单击勾选按钮接受帮助您的答案。很明显,您希望替换
BBB
wtih
XXX
,而不是
AAA
我已编辑掉问题的答案。。。要显示已解决的状态,请通过单击勾选按钮接受帮助您的答案。很明显,您希望替换
BBB
wtih
XXX
而不是
AAA
这不起作用,应该替换的是第二行和第三行BBB。这不起作用,应该替换的是第二行和第三行BBB。