这就是我正在做的(简化的例子):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
我试图把bar
放在每一个不以foo
开头的行的前面。 这是错误的:
gsed: -e expression #1, char 22: Invalid preceding regular expression
怎么了?
据我所知, sed
既没有先行也没有后顾之忧。 使用类似的语法切换到更强大的语言,如perl
。
sed -i '/^foo/! s/^/bar/' file.txt
-i
=>更改文件 /^foo/!
=>只在foo
( ^foo
)开头的行上执行下一个行动( !
) s/^/bar/
=>将行的开始改为bar 您使用GNU sed不支持的perl兼容正则表达式(PCRE)语法。 您应该根据SED Regular-Expressions重写您的正则表达式,或者使用perl来代替。