我想在文件中全局执行sed替换。但是我想跳过某些行: - 那些替换将发生在一个! - 包含逗号(,)的那些 - 包含“参数”(大写或小写)的单词
我该怎么做?
答案 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,它们提供了更好的复杂匹配工具以及更易读的代码。