我有一长串类似的清单:
AllowedUsers [email protected] [email protected] [email protected] [email protected] .....
全部在单行中。基本上是一堆用户名@ip
我想仅通过使用其用户名(例如 aaa)进行查找和替换,然后将其替换为任何内容。
我测试了我的正则表达式(正则表达式)并且它按我的预期工作。但是当我尝试在 上执行此操作时sed
,它不起作用。
$ sed 's/bbbb11.*?(?= )//' test
AllowedUsers [email protected] [email protected] [email protected] [email protected] .....
我也尝试过使用bbbb11.*?(?=[[:space:]])
,它也不起作用。
我错过了什么?
答案1
Positive ( ?=
) 和 Negative Lookahead ( ?!
) 断言仅在支持的工具中才能正常工作PCRE 扩展。 GNUsed
和 POSIX 都不支持这些库扩展。您需要perl
开箱即用的支持
perl -pe 's/bbbb11.*?(?= )//'
或者,在没有正则表达式支持的情况下,您也可以很好地实现相同的目标。对于这种简单的替换,您可以执行以下操作,该操作在 POSIX 和 GNU 中都有效sed
sed 's/\(bbbb11[^ ]*\)//'