这就是我正在做的(简化示例):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
我试图把bar
不以 . 开头的每一行放在前面foo
。这是错误:
gsed: -e expression #1, char 22: Invalid preceding regular expression
怎么了?
这就是我正在做的(简化示例):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
我试图把bar
不以 . 开头的每一行放在前面foo
。这是错误:
gsed: -e expression #1, char 22: Invalid preceding regular expression
怎么了?
sed -i '/^foo/! s/^/bar/' file.txt
-i
就地更改文件/^foo/!
!
仅对不以foo开头的行执行下一个操作 ^foo
s/^/bar/
将行的开头更改为 bar
据我所知sed
,既不是向前看也不是向后看。切换到具有相似语法的更强大的语言,例如perl
.
您使用 GNU sed 不支持的 perl 兼容正则表达式 (PCRE) 语法。您应该根据 SED正则表达式重写您的正则表达式或perl
改用它。
请注意,SED 没有前瞻功能,因此不支持您尝试使用的正则表达式功能。正如其他人所提到的,它可以在 SED 中使用其他功能来完成。