Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

grepで複数の単語・文字列・パターンを検索する方法を徹底解説

本記事では、コマンドラインツール「grep」を使って、複数の単語文字列パターンを一度に検索する方法を詳しく解説します。実際にそのまま使えるコマンド例も多数紹介するので、ぜひ参考にしてください。

grepとは?

grepとは、コマンドライン上で動作する検索機能のことです。「Global Regular Expression Print(グローバル正規表現プリント)」の略称であり、入力ファイルの中から指定した正規表現に一致する行を探し出し、その結果を標準出力に行ごとに出力します。

grepは3種類の正規表現構文に対応しています。基本正規表現(Basic)拡張正規表現(Extended)、そしてPerl互換正規表現(Perl-compatible)です。特に構文を指定しない場合、GNU grepは検索パターンを基本正規表現として扱います。

複数パターンをgrepで検索する方法

複数のパターンを同時に検索したい場合は、「選択(alternation)演算子」と呼ばれるOR演算子を使用します。この演算子はパイプ記号 | で表されます。

これにより、式のセットでもリテラル文字列でも、候補となるすべてのマッチ対象を指定できます。複数パターンを検索する際の基本的な入力形式は以下のとおりです。

$ grep 'first pattern\|second pattern' filename

'first pattern''second pattern' の部分は、実際に検索したいパターンに置き換えてください。この正規表現全体は必ずシングルクォートで囲みます。基本正規表現ではパイプ記号がそのままでは選択演算子として認識されないため、バックスラッシュ(\)でエスケープし、grepに対してパイプ記号を特別な意味で解釈するよう指示する必要があります。

パターンを拡張正規表現として扱いたい場合は、-E オプション(--extended-regexp)を使用します。

$ grep -E 'first pattern|second pattern' filename

拡張正規表現では、パイプ記号をエスケープする必要はありません。

特定のファイルを対象に検索することも可能です。たとえば presentation.txt の中からパターンを検索する場合は次のようになります。

$ grep -E 'first pattern|second pattern' presentation.txt

実行結果には、検索した文字列がハイライト表示されて出力されます。

検索対象のファイルが別のディレクトリにある場合は、フルパスを指定してgrepに検索場所を教える必要があります。

$ grep -E 'first pattern|second pattern' /home/presentation.txt

複数の文字列をgrepで検索する方法

最も基本的なパターンはリテラル文字列です。複数の文字列を検索するには、grepコマンドの後にそれらを続けて指定します。たとえば「one」「two」「three」という3つの文字列を検索する場合、次のように入力します。

$ grep 'one\|two\|three'

そのコマンドに続けて、検索対象のファイル名を指定します。拡張正規表現を使用する場合は、エスケープ文字 \ を取り除くだけでOKです。

$ grep -E 'one|two|three'

大文字小文字の区別を無視する方法

grepコマンドはデフォルトで大文字と小文字を区別します。英字の大小を無視して検索したい場合は、-i オプション(--ignore-case)を使用します。

$ grep -i 'one\|two\|three'

マッチ件数をカウントして表示する方法

ログファイル内で警告やエラーの件数が増えているかだけを把握したい場合など、詳細な結果ではなくマッチ数を知りたいときには -c オプションが便利です。たとえば myapp.log ファイル内の該当件数をカウントするには、次のように実行します。

grep -c 'one\|two\|three' /var/log/myapp.log

特定のファイルタイプのみをgrepで検索する方法

特定の拡張子を持つファイルだけを対象に、複数の文字列を検索することもできます。これにより、ディレクトリ内のすべてのテキストファイルやログファイルなどをまとめて検索可能です。ファイル名の代わりにアスタリスク(*)と拡張子を組み合わせて指定します。前述のエラー検索の例を使うと、すべてのログファイルを調べるコマンドは次のとおりです。

grep -c 'one\|two\|three' /var/log/*.log

サブディレクトリも再帰的に検索する方法

アスタリスクを使った検索では、カレントディレクトリ直下のファイルしか対象になりません。すべてのサブディレクトリまで含めて検索したい場合は、-R オプションを使用します。

grep -R 'one\|two\|three' /var/log/*.log

これにより、指定した /var/log/ ディレクトリおよびそのサブディレクトリ内にあるすべてのファイルが検索対象となり、結果が出力されます。

完全一致の単語だけをgrepで検索する方法

通常のgrepコマンドは、完全一致だけでなく、文字列が文中に含まれている行もすべて表示します。たとえば「value」を検索すると、「values」や「valued」を含む行もヒットします。単語全体が完全一致する行だけを取得したい場合は、-w オプション(--word-regexp)を使用します。「one」「two」「three」の完全一致を検索する例は以下のとおりです。

$ grep -w 'one\|two\|three'

なお、「単語文字」には英数字(0-9、a-z)およびアンダースコア(_)が含まれます。それ以外の文字はすべて非単語文字として扱われます。

  1. Excelファイルを複数人で共有して同時編集する方法|Microsoft 365・旧バージョン両対応

    チームや組織で協力して作業する際、Excelファイルを共有して全員が同じブックを同時に編集できるようにしたい場面は多いのではないでしょうか。本記事では、Excelファイルを複数のユーザーでリアルタイムに共同編集できるようにする方法を、バージョン別にわかりやすく解説します。Excelファイルを複数人で共有する2つの基本方法ここでは、「Sales Report of Frutis.xlsx」というサンプルファイルを例に、複数のユーザーへ共有する手順を紹介します。Excelのバージョンによって、主に次の2つの方法があります。方法1. Microsoft 365でExcelファイルを共有するMicro

  2. Windows 10のアップデートを確認・インストールする方法【2022年版】

    Windows Updateの確認とインストールは、Windowsを快適に動作させ続けるための最も効果的な方法の一つです。Microsoftは不具合の修正やセキュリティ脆弱性への対応などを目的として、定期的にWindowsアップデートをリリースしており、セキュリティ専門家からもその適用が推奨されています。また、ランサムウェア攻撃やマルウェア、ウイルス感染などの脅威からPCを守るためにも、Windowsを最新の状態に保つことが重要です。では、具体的にどのようにアップデートを確認し、適用すればよいのでしょうか?この記事では、Windowsのアップデートを手動で確認・実行する方法を詳しく解説します。