lookbehind在sed工作吗?

Mat*_*ijo 23 regex grep sed lookbehind

我创建了一个测试使用,grep但它不起作用sed.

grep -P '(?<=foo)bar' file.txt
Run Code Online (Sandbox Code Playgroud)

这可以通过返回正常工作bar.

sed 's/(?<=foo)bar/test/g' file.txt
Run Code Online (Sandbox Code Playgroud)

我期待footest作为输出,但它不起作用.

hwn*_*wnd 26

GNU sed不支持外观断言.您可以使用更强大的语言,如Perl,或者可能使用ssed支持Perl样式正则表达式的实验.

perl -pe 's/(?<=foo)bar/test/g' file.txt
Run Code Online (Sandbox Code Playgroud)


Cas*_*yte 17

请注意,大多数情况下,您可以使用替换字符串中的捕获组和反向引用来避免lookbehind(或前瞻):

sed 's/\(foo\)bar/\1test/g' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 但这对于后面的“负”查找不起作用,例如,您希望将不以“ foo”开头的“ bar”替换为“ test”,如果使用/(?&lt;!foo)bar /测试/。有没有人解决这个问题?(我想在SQL文件的第5个字段上使用uniq,但是前面的字段可能包含空格,因此,我不希望将所有不在...','...之间的空格替换为“ _” ...) (2认同)