2016-12-01 33 views
0

我正在学习shell的sed。 我尝试下面的代码,如何通过sed删除一行中的第N个目标单词(='remove_mark')?

echo "one tworemove_markthree fourremove_markfive" | sed -E "s?(.*)remove_mark(.*)?\1\2?" 

我预期的这个输出是

one twothree fourremove_markfive 

但上面的代码的输出以下,

one tworemove_markthree fourfive 

第一remove_mark被保持,但第二个被删除。 但是我想删除第一个。怎么做?以及如何删除所有匹配的目标词?非常感谢你。

+1

似乎你的标题不会与您的问题匹配 - 你要删除哪个字,即是你的期望的输出?如有必要,请[编辑]您的问题以向我们确切显示您想要的内容并更改标题。 –

回答

1

只需匹配remove_mark并且不需要替换。

$ echo "one tworemove_markthree fourremove_markfive" | sed 's/remove_mark//' 
one twothree fourremove_markfive 

要删除所有目标,用g(全球)修改。

$ echo "one tworemove_markthree fourremove_markfive" | sed 's/remove_mark//g' 
one twothree fourfive 
+0

谢谢你告诉我一个简单的解决方案。 – mora

+1

@mora欢迎:) – nu11p01n73R

相关问题