一致後に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がありますが、実際には1000+をgrepします。

答え1

-EGNU grepに拡張正規表現(ERE)を使用するように指示し、-PERE機能の親セットであるPerl互換正規表現(PCRE)を使用するように指示します。これは正規表現言語の2つのバリエーションであるため、オプションは互いに競合します。

ただし、表示した内容にはPCREが必要ないため、次のものを使用できるようです。

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

これは有効な正規表現でもあり、PCREでも同じ意味を持ちます。 EREエンジンとPCREエンジンの間に性能の違いがあるかどうかはわかりません。

関連情報