私は次のように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
-E
GNU grepに拡張正規表現(ERE)を使用するように指示し、-P
ERE機能の親セットであるPerl互換正規表現(PCRE)を使用するように指示します。これは正規表現言語の2つのバリエーションであるため、オプションは互いに競合します。
ただし、表示した内容にはPCREが必要ないため、次のものを使用できるようです。
grep -o -E '.{0,10}(UNIQ_23A0E66922726E9|UNIQ_23A0E66D943CFF3).{0,10}' xst.sql
これは有効な正規表現でもあり、PCREでも同じ意味を持ちます。 EREエンジンとPCREエンジンの間に性能の違いがあるかどうかはわかりません。