grep
は、1つ以上の入力ファイルで正規表現に一致する行を検索し、一致する各行を標準出力に書き込むために使用される強力なコマンドラインツールです。
この記事では、grep
で検索するときに、1つまたは複数の単語、パターン、またはディレクトリを除外する方法を説明します。 。
単語とパターンを除外する#
検索パターンに一致しない行のみを表示するには、-v
を使用します (または--invert-match
)オプション。
たとえば、文字列nologin
を含まない行を印刷するには 使用するもの:
grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
-w
オプションはgrep
に指示します 指定された文字列が単語全体(単語以外の文字で囲まれている)である行のみを返します。
デフォルトでは、grep
大文字と小文字が区別されます。これは、大文字と小文字が別個のものとして扱われることを意味します。検索時に大文字と小文字を区別しない場合は、grep
を呼び出します。 -i
を使用 オプション。
検索文字列にスペースが含まれている場合は、一重引用符または二重引用符で囲む必要があります。
2つ以上の検索パターンを指定するには、-e
を使用します オプション:
grep -wv -e nologin -e bash /etc/passwd
-e
を使用できます 必要な回数だけオプションを選択できます。
複数の検索パターンを除外する別のオプションは、OR演算子|
を使用してパターンを結合することです。 。
次の例では、文字列nologin
を含まない行を出力します。 またはbash
:
grep -wv 'nologin\|bash' /etc/passwd
GNU grep
Basic、Extended、Perl互換の3つの正規表現構文をサポートします。デフォルトでは、grep
パターンを、|
などのメタ文字が含まれる基本的な正規表現として解釈します。 それらの特別な意味を失い、あなたはそれらのバックスラッシュバージョンを使用しなければなりません。
拡張正規表現オプション-E
を使用する場合 、次に演算子|
以下に示すように、エスケープしないでください:
grep -Ewv 'nologin|bash' /etc/passwd
リテラル文字列または式セットである可能性のあるさまざまな一致を指定できます。次の例では、文字列games
行の先頭で発生するものは除外されます:
grep -v "^games" file.txt
コマンドの出力は、grep
でフィルタリングできます 配管を介して、特定のパターンに一致する線のみが端子に印刷されます。
たとえば、ユーザー「root」として実行されているプロセスを除く、システムで実行中のすべてのプロセスを印刷するには、ps
の出力をフィルタリングできます。 コマンド:
ps -ef | grep -wv root
ディレクトリとファイルを除外する#
-r
を使用して再帰検索を実行する場合 または-R
オプションの場合、検索結果から特定のディレクトリを除外することができます。
-r
の主な違い または-R
オプションは、grepが大文字のR
で呼び出された場合です。 すべてのシンボリックリンクをたどります
ディレクトリを検索から除外するには、--exclude-dir
を使用します オプション。除外されたディレクトリへのパスは、検索ディレクトリからの相対パスです。
これは、文字列linuxize
を検索する方法を示す例です。 /etc
内のすべてのファイル 、/etc/pki
を除く ディレクトリ:
grep -R --exclude-dir=pki linuxize /etc
複数のディレクトリを除外するには、除外されたディレクトリを中かっこで囲み、スペースを入れずにカンマで区切ります。
たとえば、proc
を除くLinuxシステムで文字列「gnu」を含むファイルを検索するには 、boot
、およびsys
実行するディレクトリ:
grep -r --exclude-dir={proc,boot,sys} gnu /
ワイルドカードマッチングを使用する場合、ベース名が--exclude
で指定されたGLOBと一致するファイルを除外できます。 オプション。
以下の例では、現在の作業ディレクトリ内のすべてのファイルで文字列linuxize
を検索しています。 、.png
で終わるファイルを除く および.jpg
ディレクトリ:
grep -rl --exclude=*.{png,jpg} linuxize *
結論#
grep
コマンドを使用すると、ファイルを検索するときにパターンとディレクトリを除外できます。