这就是我正在做的事情(简化示例):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
我正在尝试将bar
放在不以foo
开头的每一行的前面。这是错误:
gsed: -e expression #1, char 22: Invalid preceding regular expression
怎么了?
答案 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。