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 コマンドを使用すると、ファイルを検索するときにパターンとディレクトリを除外できます。