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

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

我有一个正则表达式,它对我来说很好用。我在以下网站上检查了它:https://www.regex101.com/

(?<=.log:)[^;]*

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

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

我知道有匹配项,因为我根据此模式创建并测试了正则表达式。此外,-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

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

答案1

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

相关内容