为什么这个正向前瞻正则表达式 'string.*?(?= )' 在 sed 中不起作用?

ann*_*hri 2 sed text-processing regular-expression

我有一长串类似的东西:

AllowedUsers aaaa01@11.22.33.44 aaaa03@11.22.55.77 bbbb11@99.99.99.99 ccc00@11.0.0.11 .....
Run Code Online (Sandbox Code Playgroud)

全部在一行中。基本上它是一堆用户名@ip

我只想使用其用户名(例如 aaa)进行查找和替换,然后将其替换为空。

我测试了我的正则表达式(RegExr),它按我的预期工作。但是当我尝试这样做时sed,它没有用。

AllowedUsers aaaa01@11.22.33.44 aaaa03@11.22.55.77 bbbb11@99.99.99.99 ccc00@11.0.0.11 .....
Run Code Online (Sandbox Code Playgroud)

我也试过用bbbb11.*?(?=[[:space:]]),也没用。

我错过了什么?

Ini*_*ian 5

Positive( ?=) 和 Negative lookahead( ?!) 断言仅适用于支持PCRE 扩展的工具。GNUsed和 POSIX都不支持这些库扩展。您需要perl开箱即用的支持它

perl -pe 's/bbbb11.*?(?= )//'
Run Code Online (Sandbox Code Playgroud)

或者您可以在没有正则表达式支持的情况下很好地实现相同的目标。对于这种微不足道的替换,您可以执行以下操作,这些操作在 POSIX 和 GNU 中均适用sed

sed 's/\(bbbb11[^ ]*\)//'
Run Code Online (Sandbox Code Playgroud)