Linuxコマンド_grepコマンドで特定の文字列を抽出する方法
はじめに
この記事では、grepコマンドとは、grepコマンドの書き方、grepコマンドのパターン別使い方、grepコマンドの主なオプションについて解説します。
grepは指定した文字列を抽出するのに非常に便利なコマンドですので、使い方を覚えていきましょう初学者の方にもわかりやすいように説明させていただきますので、お付き合いいただければ幸いです。
1.grepコマンドとは
grepコマンドとはファイルに特定の文字列が存在するか検索するときに使われる便利なコマンドです。
grepコマンドは書き方も簡単です。
$ grep 検索文字列 ファイル名
基本的にこの記述のみでファイルに指定した文字列が存在するか、検索することが可能です。
2.grepコマンドの使い方
①指定した文字列を抽出する
まずは一番オーソドックスな方法として、指定したファイルに特定の文字列が存在するか調べてみましょう。
この例では、ファイルsample01.txtに”Hello”という文字列が含まれているか調べています。
$ grep Hello sample01.txt
実行結果:
このように検索した文字列が存在する場合は、検索対象の文字列が表示されます。
②複数のファイルから検索する
sample01.txtからsample05.txtのような検索対象のファイルが複数存在する場合は、以下のように*(ワイルドカード)を使用すると便利です。
$ grep samurai sample0*
実行結果:
このようにsample0*とすれば、sample0を含むファイルを一気に検索することができます。
③複数の文字列を検索する
場合によっては複数の文字列を含む行があるか検索したい場合があります。
grepで複数の条件を指定したい場合は|(パイプ)でコマンドを繋げる方法があります。
$ grep 検索文字列1 ファイル名 | grep 検索文字列2
以下の例では、sample0を含むファイルの中に”Hello”と”Linux”が存在する行があるかを調べています。
$ grep Hello sample0* | grep Linux
実行結果:
3.grepコマンドの主なオプション
ここでは、grepコマンドでよく使用する主なオプションについて紹介します。
①-c(マッチした行数を表示する)
検索文字列が複数マッチした場合の行数を取得したい場合はオプション「-c」を使用します。
$ grep -c Hello sample01.txt
実行結果:
②-h(マッチしたファイル名を表示しない)
検索文字列がマッチした場合、マッチした行番号を取得するにはオプション「-n」を使用します。
$ grep -n Hello sample01.txt
実行結果:
③-i(大文字小文字を区別しない)
検索文字列が大文字小文字関係なくマッチした場合、マッチした文字列を取得するにはオプション「-i」を使用します。
$ grep -i Hello sample01.txt
実行結果:
④-n(マッチした文字列の行番号を表示する)
検索文字列がマッチした場合、マッチした文字列の行番号を取得するにはオプション「-n」を使用します。
$ grep -n Hello sample01.txt
実行結果:
⑤-E(拡張正規表現で検索を行う)
sample01.txt内のファイルすべての中から文字列lloを取得するにはオプション「-E」を使用します。
$ grep -E "llo" sample01.txt
実行結果:
⑥-v(マッチしない行を表示する)
検索文字列がマッチした場合、マッチしない行を取得するにはオプション「-v」を使用します。
$ grep -v Hello sample01.txt
実行結果:
⑦-lオプション(検索結果にファイル名のみ表示する)
ファイルすべての中からhの文字を検索し、検索文字列がマッチした場合、ファイル名の表示を取得するにはオプション「-l」を使用します。
$ grep -l h sample0*
実行結果:
4.ワイルドカードを用いたgrepコマンドによる正規表現
ワイルドカードとはLinuxコマンドラインで複数のファイルやディレクトリを操作する場合に利用する特殊記号ことです。
ワイルドカードを使うとコマンドラインでの操作効率が格段にアップするので、使って慣れていきましょう。
5.ワイルドカードの種類
①^(行頭)
ファイルに含まれる行頭に"H"を含む文字列を検索する。
$ grep "^H" sample01.txt
実行結果:
②$(行末)
ファイルに含まれる行末に"o"を含む文字列を検索する。
$ grep "o$" sample01.txt
実行結果:
③...(任意の1文字を表す)
ファイルに含まれる"Hではじまりo"で終わる5文字の文字列を検索する。
$ grep "H...o" sample01.txt
実行結果:
④[ABC]([]内に指定した文字のいずれかを含む)
ファイルに含まれる行頭に"He"いずれかを含む文字列を検索する。
$ grep "^[He]" sample01.txt
実行結果:
⑤[A-Z]([]内に指定したAからZのいずれかを含む)
ファイルに含まれる行頭に"AからZ"のいずれかを含む5文字の文字列を検索する。
$ grep "^[A-Z]...." sample01.txt
実行結果: