Linux

パターンにマッチした行を表示する grep コマンド

投稿日:2018年12月5日 更新日:

1. はじめに

grep は、対象ファイルの中で、指定した文字列パターンにマッチした行を表示するコマンドです。

※ 本ページで扱うのは GNU grep v2.25 です。

2. 主な使い方

個人的に、よく使うのは以下の使い方です。

$ grep -inR 文字列パターン 対象ファイルパス
  • 「対象ファイルパス」はディレクトリでもOKです(-R オプションを指定しているため)。

指定した3つのオプションを表にしました。

grep の主要オプション
オプション 説明
-i, --ignore-case 大文字・小文字を区別しない。
-n, --line-number 行頭に行番号を出力する。
-R, -r, --recursive ディレクトリ内のファイルも再帰的に検索する。

例1

以下が記述された hello.c ファイルがカレントディレクトリに置いてあるとします。

#include <stdio.h>
int main()
{
   printf("Hello, Foo!");
   printf("Hello, Bar!");
   printf("Hello, Baz!");
   return 0;
}

hello.c ファイル内の “Hello” という文字列を検出する場合は、以下のようにコマンドを実行します。

$ grep Hello hello.c
   printf("Hello, Foo!");
   printf("Hello, Bar!");
   printf("Hello, Baz!");

例2

同じ hello.c ファイルが、test ディレクトリ内に置いてあるとします。

test
 └─ hello.c

この場合は、先程紹介した -R オプションを使って再帰的にディレクトリ内のファイルまで処理の対象とすることができます。

$ grep -R Hello test
test/hello.c:   printf("Hello, Foo!");
test/hello.c:   printf("Hello, Bar!");
test/hello.c:   printf("Hello, Baz!");

では、3つのオプションを全て指定して実行します。文字列パターンは、”hello” と小文字にしておきます。

$ grep -inR hello test
test/hello.c:4:   printf("Hello, Foo!");
test/hello.c:5:   printf("Hello, Bar!");
test/hello.c:6:   printf("Hello, Baz!");

-i オプションにより、”Hello” がマッチされました。また、-n オプションにより、マッチした行番号が表示されました。

3. その他のオプション

それ以外で、時々使うオプションです。

その他のオプション
オプション 説明
-E, --extended-regexp
  • 指定した文字列を拡張正規表現として扱います。
-v, --invert-match
  • マッチしない行を出力します(条件が反転します)。
-a, --text
  • ファイルをテキストファイルとして扱います。
  • テキストファイルを対象とする場合は、このオプションを指定しましょう。grep コマンドが勝手にバイナリファイルだと認識して、出力結果がおかしくなることがあるからです。

4. 正規表現について

grep では以下の3つの正規表現を使うことができます。

  1. 基本正規表現 (BRE)
  2. 拡張正規表現 (ERE)
  3. Perlの正規表現 (PCRE)
grep の正規表現の種類
正規表現の種類 説明
基本正規表現 (BRE)
  • デフォルトの正規表現。
  • かなりいろいろな正規表現演算子が使えますが、特殊記号をエスケープする必要があったりして少々面倒です。
  • 使用できる正規表現演算子:正規表現メモ #GREP
拡張正規表現 (ERE)
  • この正規表現を使うには、-Eオプションを指定する(もしくは `egrep` コマンド)。
  • BRE より多くの正規表現演算子が使えます。ちゃんと正規表現を使いたい場合は、こちらを使うことをお勧めします。
  • 使用できる正規表現演算子:正規表現メモ #EGREP
Perlの正規表現 (PCRE)

簡単な表現しか使わないのであれば基本正規表現でよいですが、ちゃんと正規表現を指定したい場合は、-E オプションを使って拡張正規表現を使いましょう。

📂-Linux

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Google App Engine

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする手順を紹介します。

Linux

シェルスクリプト (Bash) では組み込みコマンド set を活用しましょう

Linux や MacOS、Windows の WSL でシェルスクリプト(Bash)を書く場合は、組み込みコマンド set を活用しましょう。より完成度の高い処理を書くことができます。 スポンサード …

Linux

Linux のコマンドラインで発生するビープ音を消す

Linux のコマンドでビープ音を消す方法を紹介します。

Linux

ドキュメントルートに chmod コマンドを実行する際、指定すると便利なモード引数

目次1. はじめに2. chmod に関する前提知識3. ディレクトリは rwxr-xr-x ファイルは rw-r–r– にする解説4. ディレクトリは rwxrwxr-x ファイルは rw-rw …

Linux

pip install でインストールしたパッケージを使おうとするエラーが発生する

目次1. はじめに2. 環境3. 対処方法4. おわりに 1. はじめに 以下のコマンドで、Python のパッケージをシステムにインストールしたとします。 $ sudo pip install {パ …