GNU/Linux >> Linux の 問題 >  >> Linux

Grepで除外する方法

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


Linux
  1. PDFファイルをgrepする方法は?

  2. ダッシュで検索を高速化する方法は?

  3. ファイル内の複数行パターンを検索するにはどうすればよいですか?

  1. Linuxでファイルを見つける方法

  2. パターンに一致する特定のファイルを検索する方法は?

  3. 複数のpdfファイルの内容を検索するには?

  1. Linux で GREP を使用して特定のテキストを検索する方法

  2. grep を使用して逆方向に検索する

  3. 再帰的にgrepするにはどうすればよいですか?