皆さんはLinuxコマンドの一つである「grep」はご存知でしょうか?
「grep」はファイルに特定の文字が存在するかを検索できるコマンドでして、複雑な検索方法にも対応できるので使い方を覚えておくと今後便利に活用することができるはずです。
そこで、今回はgrepコマンドの基本的な使い方と便利なオプションについて解説します。
grepコマンドとは何か
grepはファイルに含まれるパターンを行単位で検索できるコマンドなのですが、主に他のコマンドの出力結果を「|」パイプで繋いで検索をかけるという使い方をされます。
例えば、ディレクトリの中に複数のファイルが存在し、特定の名前を含んだファイルのみを見つけ出したい場合、「ls | grep [ファイル名]」などと入力すれば求めているファイルを瞬時に探し出すことができ、作業時間の短縮に繋がります。
それ以外にもgrepコマンド単体でもファイルに含まれているキーワードを検索することができるので、わざわざファイルを開いて探す手間が省けるでしょう。
grepコマンドの書き方と便利な使い方
grepコマンドの基本的な書式と実践的な活用方法について解説していきます。
まずはもっともシンプルな書き方として以下の記述方法があります。
ちなみにファイル名の所に「*」アスタリスクを指定すると、全てのファイルを検索します。
grep 検索正規表現 ファイル名
ファイル内の文字を検索する場合
例えば複数あるファイルの中から特定の変数名を含んだもの検索したい場合は以下のように記述することで、探し出したいファイルを表示することができます。
#カレンディレクトリの全てのファイルに対して「hoge」文字列が含まれているファイルを探す grep hoge *
ファイル名を検索する場合
先ほども紹介した通り、特定の名前を含んだファイルを検索したい場合はlsコマンドと「|」パイプを組み合わせることによって、求めている結果を得ることができます。
# ファイル名に「test」という文字列が含まれているファイルを検索 ls | grep test
検索条件を複数指定できる「and」検索をする場合
例えばファイルに「”hoge”という文字列と”fuga”という文字列」が含まれているものをand検索したい場合は以下のように記述することで、探したいファイルを表示してくれます。
# 一行に「hoge」と「fuga」の文字列を含んだファイルを検索 grep hoge * | grep fuga
どちらか含んでいる「or」検索をする場合
例えばファイル内に「”hoge”または”fuga”」のどちらかの文字列を含んでいるものを検索したい場合は、以下のように記述することで、探したいファイルを表示してくれます。
# 「"hoge"か"fuga"」の文字列を含んでいるファイルを表示 grep -e hoge -e fuga *
特定の文字を含まない「not」検索をする場合
例えばファイル内に「”fuga”」という文字列を含まないものだけを検索したい場合は、以下のように記述することで、探したいファイルを表示してくれます。
# 「v」オプションで特定の文字を含まないファイルを表示 grep -v fuga *
grepコマンドのオプション
grepコマンドで使えるオプションを理解しておけば、作業時間の大幅な短縮に繋がりますので、主要なオプションだけでも覚えておくようにしましょう。
詳しくは下記表をご覧ください。
-c | 検索に一致した行の数を表示する |
---|---|
-b | 検索パターンが何文字目にあるかを表示する |
-E | 正規表現を用いて検索を行う |
-e | 検索パターンの指定を行う |
-h | 検索結果にファイル名を表示しない |
-i | 検索に大文字と小文字を区別しない |
-L | 検索に該当しないファイルを表示する |
-l | 検索結果にファイル名のみ表示する |
-n | 検索結果に行番号を表示する |
-o | 検索に一致した文字を表示する |
-q | 検索結果をコンソールに表示しない (シェルスクリプトで判定用に使う) |
-r | 再起的に検索 (ディレクトリ内をまとめて検索する際に便利) |
-s | エラーメッセージを表示しない |
-v | 検索に一致しないものを表示する |
-x | 検索に行全体が一致するものを表示する |
正規表現による詳細な検索方法
先ほどの表で紹介した「-E」オプションを使うことで正規表現を使った検索が可能になります。
正規表現を上手く活用できれば、より細かくファイルを探し出すことができるので覚えておきましょう。
そこで、ここでは良く使われる正規表現の活用方法について解説していきます。
詳しくは下記解説をご覧ください。
行の先頭文字を指定して検索する
行の先頭文字を決めて検索をかけたい場合は「^」を使い以下のように記述します。
# 行の先頭が「a」で始まるファイルを検索 grep -E "^a" *
行の末尾を指定して検索する
行の末尾の文字を決めて検索をかけたい場合は「$」を使い以下のように記述します。
# 大文字の「P」を末尾に含んだ行のファイルを表示 grep -E "P$" *
まとめ
今回はLinuxコマンドの「grep」の使い方について解説してきましたが、いかがでしたでしょうか?
grepの使い方を覚えておけば、Linuxコマンドをより柔軟に使いこなすことができるようになります。
また、grepはShellScriptに組み込ませて使えば、より高度なファイル操作も可能になるのでプログラムで日々の業務を自動化したい方にとっては後に重要なコマンドになってくることでしょう。
それでは皆さん良いLinuxライフを!