"grep --fixed-strings"の使い方

いくつかは次のとおり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キャプチャされます。 (括弧はシェルでも特別なので、コマンドラインで引用する必要があります。)warn

[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含まれている特殊文字に関係なく、正確に一致する行のみを検索します。

おすすめ記事