我在GNU sed中使用前瞻性正则表达式有什么问题?

时间:2012-08-29 10:36:02

标签: regex linux sed regex-lookarounds

这就是我正在做的事情(简化示例):

gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt

我正在尝试将bar放在不以foo开头的每一行的前面。这是错误:

gsed: -e expression #1, char 22: Invalid preceding regular expression

怎么了?

3 个答案:

答案 0 :(得分:110)

sed -i '/^foo/! s/^/bar/' file.txt
  • -i更改文件
  • /^foo/!仅对 foo !
  • 开头的非^foo行执行下一个操作
  • s/^/bar/将行的开头更改为bar

答案 1 :(得分:53)

据我所知sed既没有前瞻也没有后悔。切换到具有类似语法的更强大的语言,如perl

答案 2 :(得分:7)

您使用GNU sed不支持的perl兼容正则表达式(PCRE)语法。 您应该根据SED Regular-Expressions重写您的正则表达式,或者使用perl。