如何使用sed跳过行?

时间:2014-07-11 07:47:30

标签: sed

我想在文件中全局执行sed替换。但是我想跳过某些行: - 那些替换将发生在一个! - 包含逗号(,)的那些 - 包含“参数”(大写或小写)的单词

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您的第一个例外并非易于实现,但也许您可以将其改写为替换的一部分?所以要取代" foo"用" bar"除了那些方面,我一起去

sed '/parameter\|,/!s/^\([^!]*\)foo/\1bar/'

(有些sed方言需要更多或更少的反斜杠。)

/parameter\|,/!只会选择与此正则表达式不匹配的行。

s/^\([^!]*\)foo/\1bar/将替换" foo"用" bar"只要" foo"没有感叹号。前导文本被捕获到后引用\1中,基本上被替换为自身。

不区分大小写的匹配需要在sed - [Pp][Aa][Rr][Aa][Mm][Ee][Tt][Ee][Rr]中使用丑陋的正则表达式。对于任何更复杂的东西,可以切换到Awk或Perl,它们提供了更好的复杂匹配工具以及更易读的代码。