Grep(Global Regular Expression Print)は、一致するパターンを見つけるための非常に便利なLinuxコマンドです。ファイルやディレクトリを調べたり、コマンドからの入力を読み取ったりすることもできます。正規表現または正規表現で検索し、指定されたパターンに一致するファイルから行を出力します。
この投稿では、LinuxでGrepコマンドを使用する方法を見ていきます。ここで説明するコマンドは、Ubuntu20.04でテストされています。同じGrepコマンドは、Debian、Mint、Fedora、およびCentOSでも機能します。
grepコマンドのインストール
Ubuntu 20.04 LTSを含むほとんどのLinuxディストリビューションには、grepがインストールされています。システムにGrepがインストールされていない場合は、ターミナルで次のコマンドを使用してインストールできます。
$ Sudo apt-get install grep
Grepコマンド構文
Grepコマンドの基本的な構文は次のとおりです。
$ grep [options] PATTERN [FILE...]
Grepコマンドの使用
ファイル内の単語の検索
Grepを使用すると、特定のファイル内の任意の単語を検索できます。構文は次のようになります:
$ grep <word> <filename>
たとえば、次のコマンドは、ファイル「Donuts.txt」で「Donuts」という単語を検索します。
$ grep Donuts Donuts.txt
複数のファイルで単語を検索する
複数のファイルで特定の単語を検索することもできます。
$ grep <word> <filename1> < filename2>
たとえば、次のコマンドは、「Donuts.txt」と「cakes.txt」の両方で「Donuts」という単語を検索します。
$ grep Donuts Donuts.txt cakes.txt
ケースを無視する
Grepはデフォルトで大文字と小文字を区別する検索を実行します。これは、「ドーナツ」と「ドーナツ」の扱いが異なることを意味します。上記のコマンドを「ドーナツ」で再度実行すると、今回は出力が表示されません。
$ grep donuts Donuts.txt
ケースを無視するには、「 -i」を追加する必要があります 」を次のようにコマンドに追加します:
$ grep –i <word> <filename>
ディレクトリ内の拡張子でファイルを検索する
特定のディレクトリにあるファイルを拡張子で見つけることもできます。これを行うには、次の構文を使用します。
$ ls ~/<directory> | grep .<file type>
たとえば、「Downloads」フォルダ内のすべての「.jpeg」ファイルを検索するには、コマンドは次のようになります。
$ ls ~/Downloads | grep .jpeg
パターンに一致しない線を印刷する
Grepでは、「 -v 」を追加して、パターンに一致しない行を印刷することもできます。 」をコマンドに追加します。これを行うには、次の構文を使用します。
$ grep -v <word> <filename>
たとえば、次のコマンドは、「ドーナツ」という単語を含む行を除くすべての行を出力します。
一致する単語のみを印刷する
デフォルトでは、grepはパターンを含む行全体を出力します。一致する単語だけを印刷するには、「 -o」を追加します 」をコマンドに追加します。
$ grep -o <word> <filename>
たとえば、次のコマンドは、ファイル「Donuts.txt」の行全体を印刷するのではなく、「Donuts」という単語のみを印刷します。
一致するパターンと行の行番号を印刷する
デフォルトでは、grepはパターンを含む行全体を印刷します。行番号と一致する単語を含む行の両方を印刷するには、「 -n」を追加します 」をコマンドに追加します。
$ grep -n <word> <filename>
たとえば、次のコマンドは、行番号と「ドーナツ」という単語を含む行の両方を出力します。
$ grep -n Donuts Donuts.txt
パターンに一致するファイル名を印刷する
パターンに一致する現在のディレクトリ内のすべてのファイルを印刷するには、次の構文を使用します。
$ grep -l “<word>” *
たとえば、次のコマンドは、「Hello」という単語を含むすべてのファイルを出力します。
$ grep -l “Hello” *
一致する単語全体を印刷する
デフォルトでは、grepは、単語の一部であっても、パターンに一致するすべての単語を出力します。下の画像を見てください。
「do」という文字列を検索しました 」と表示され、「 do」を含むすべての行が表示されます。 」。完全に一致させるには、「 -w」を追加します 」をコマンドに追加します。
$ grep –w <word> <filename>
たとえば、「 do」という正確な単語を検索するには Donuts.txtファイルの「」コマンドは次のようになります。
$ grep -w do Donuts.txt
ご覧のとおり、「 do」という正確な単語を含む行のみが印刷されるようになりました。 」。
特定の単語で始まる一致行
特定の単語で始まる行を印刷するには、「 ^」を追加します 」をコマンドに追加します。
$ grep ^<word> <filename>
たとえば、次のコマンドは、「 Th」で始まるすべての行を出力します。 」。
$ grep ^Th Donuts.txt
パターンで終わる一致する線
特定のパターンで終わる行を印刷するには、「 $」を追加します 」をコマンドに追加します。
$ grep <word>$ <filename>
たとえば、次のコマンドは、「 t」で終わるすべての行を出力します。 」。
$ grep t$ Donuts.txt
特定の文字を含む一致する行
1文字または複数文字が含まれる行を検索する場合は、次の構文を使用します。
$ grep “[<letters>]” <filename>
たとえば、次のコマンドは、「a」から「f」までの文字を含むすべての行を出力します。
$ grep “[a-f]” Donuts.txt
再帰検索
ディレクトリおよびサブディレクトリ内のすべてのファイルで特定のパターンまたは単語を検索するには、次を使用します。
$ grep -R <word> <path>
たとえば、次のコマンドは、Documentsディレクトリに「Hello」という単語を含むすべてのファイルを一覧表示します。以下の出力では、一致する単語とともにファイルパスを確認できます。
$ grep -R “Hello” /home/maryam/Documents
一致した単語の前後に特定の行を印刷する
デフォルトでは、Grepは特定のパターンに一致する行のみを印刷します。 -Aを使用 Grepのオプションでは、一致した単語の前後にいくつかの行を含めることもできます。
試合後の線の印刷
Nを含む一致する単語を含む行を印刷するには 試合後の行数:
$ grep -A <N> <word> <filename>
たとえば、次のコマンドは、「hell」という単語を含む行とその後ろの1行を出力します。
$ grep -A 1 hell Donuts.txt
試合前に線を印刷する
Nを含む一致する単語を含む行を印刷するには 試合前の行数:
$ grep -B <N> <word> <filename>
たとえば、次のコマンドは、「hell」という単語を含む行とその前の1行を出力します。
$ grep -B 1 hell Donuts.txt
試合の前後に線を印刷する
Nを含む一致する単語を含む行を印刷するには 試合の前後の行数:
$ grep -C <N> <word> <filename>
たとえば、次のコマンドは、「hell」という単語を含む行とその前後の1行を出力します。
$ grep -C 1 hell Donuts.txt
一致数のカウント
-cを使用する grepのオプションを使用すると、特定のパターンに一致する行を数えることができます。一致する単語の数ではなく、行数にのみ一致することを忘れないでください。
$ grep -c <word> <filename>
たとえば、次のコマンドは、「ドーナツ」という単語を含む行数を出力します。
$ grep -c Donuts Donuts.txt
ファイル「Donuts.txt」には4つの「Donuts」が含まれていますが、-cはカウントを3としてしか出力していないことに注意してください。これは、一致数ではなく行数をカウントするためです。
grepの詳細については、次のコマンドを使用してください。
$ grep --help
または、以下のコマンドを使用してマニュアルページにアクセスします。
$ man grep
これにより、Grepのマニュアルページに移動します。
これですべてです。この投稿では、Linuxでのgrepコマンドの基本的な構文と使用法について説明しました。また、その有用性を拡張するために、いくつかのコマンドラインオプションを実行しました。 LinuxでのGrepコマンドのその他の使用法について、私たちが見逃していることを知っている場合は、以下のコメントでそれらについて知りたいと思います。
この関連記事を調べて、Linuxでファイルとディレクトリを見つける方法を見つけてください。