我尝试像这样 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 引擎之间是否存在性能差异。