如何在匹配后使用 grep -E 和字节

如何在匹配后使用 grep -E 和字节

我尝试像这样 grep :

grep -E '(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3)' xst.sql

但是我在比赛之前和之后需要一些字节(而不是行)。

如果我同时使用 -E 和 -P 我得到:

grep: conflicting matchers specified

我想要类似的功能

grep -o -P '.{0,10}UNIQ_23A0E66922726E9.{0,10}' xst.sql 

但同时对于所有字符串 - 在示例中我有 2 个,但实际上我 grep 为 1000+。

答案1

-E告诉 GNU grep 使用扩展正则表达式 (ERE),-P告诉它使用 Perl 兼容的正则表达式 (PCRE),这是 ERE 功能的超集。这是正则表达式语言的两种不同变体,因此这些选项确实相互冲突。

不过,你所展示的内容都不需要 PCRE,所以看来你可以使用

grep -o -E '.{0,10}(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3).{0,10}' xst.sql

这也是一个有效的正则表达式,在 PCRE 中具有相同的含义。我不确定 ERE 引擎和 PCRE 引擎之间是否存在性能差异。

相关内容