いくつかは次のとおりgrep --help
です。
-E, --extended-regexp PATTERNS are extended regular expressions
-F, --fixed-strings PATTERNS are strings
オンラインには多くの例がありますが、-E
見つかりません。-F
私は正規表現をうまく扱うことができず、可能であれば使用したくないので、これは-F
より良い選択肢のようです。
オブジェクトに3つの異なる文字列が含まれていることを確認するためにgrepを使用する構文は何ですか?
ベストアンサー1
指摘したように、正規表現エンジンを選択-F
または無効にし、リテラル文字列を検索します。--fixed-string
有効な正規表現ですが、意味の異なる文字列を見つけるのに便利です。たとえば、
grep -Fe '[warn]' app.log
パターン[warn]
は有効なデフォルトの正規表現(BRE
)なので、この-F
オプションがない場合、または1つ以上を含むすべての行が検索され、grep
キャプチャされます。 (括弧はシェルでも特別なので、コマンドラインで引用する必要があります。)w
a
r
n
[err]
たとえば、次のように、ログファイルに次の行(したがって表示される行)を含むエラーメッセージを探したいとします。
[info] terrace lights on
[err] garage door control not responding
を使用すると、grep 'err'
「t」という単語はこれら2行に一致します。よくace".grep '[err]'
は両方とも"e"(および"r")を持つため、これらの2行とも一致しますが、ここでは一致をタグだけgrep -F '[err]'
に制限する簡単な方法です(または次を使用することもできます。grep -e '\[err\]'
)grep -e '[[]err[]]'
マッチしてエスケープする基本的な正規表現grep '[[]err]'
ですが、これはもっと醜いです。
検索するパターンが多い場合は、-e
このオプションを複数回使用できます。
grep -F -e '[warn]' -e '[debug]' -e '[err]' app.log
ラインマッチングどの(少なくとも1つ)のパターンが一致します。
-x
、オプションは、行--line-regex
全体がパターンと一致する場合にのみ行が一致すると見なされるため、この場合にも便利です。たとえば、grep -x foo
行がある場合は一致しますfoo
が、行がある場合は一致しませんfoobar
。一緒に使用すると、-Fx
含まれている特殊文字に関係なく、正確に一致する行のみを検索します。