在GNU sed中,我的lookahead正则expression式有什么问题?

这就是我正在做的(简化的例子):

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来代替。