为什么我的 grep -E 命令不适用于包含后视的正则表达式模式?

BoJ*_*man 1 regex grep

我有一个适合我的正则表达式。我在以下网站上检查过:https : //www.regex101.com/

(?<=.log:)[^;]*
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试将它与 grep 一起使用时它不起作用。我试图做以下事情:

cat foo.log | grep -E '(?<=.log:)[^;]*'
Run Code Online (Sandbox Code Playgroud)

我知道有匹配项,因为我在此模式之后创建并测试了我的正则表达式。-E 参数也有效,因为正则表达式*.*工作正常。

以下是我的目标文件中的一些示例行:

201407010300.log:2014-07-01 03:00;10.112.64.250;2;1145439;ULC IBM
201407010100.log:2014-07-01 01:00;10.112.64.250;2;1145216;ULC IBM
201407010100.log:2014-07-01 01:00;10.112.64.250;3;968549;ULC Primeline
Run Code Online (Sandbox Code Playgroud)

你有什么建议为什么这不起作用?

mur*_*uru 5

Lookaheads 和 Lookbehinds 不是扩展正则表达式 (ERE) 语法的一部分。您需要使用该-P选项与 Perl 兼容的正则表达式 (PCRE) 。