[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

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

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

関連記事

CentOS

CentOS Stream 8 の PHP 7.4 を 8.2 に変更する

CentOS Stream 8 の PHP 7.4 を 8.2 に変更する手順を紹介します。

Linux

Bashのジョブ制御機能

Bashのジョブコントロールの簡単な使い方です。

Linux

【Linux】書き込み権限のないファイルにリダイレクトする

【Linux】書き込み権限のないファイルにリダイレクトする方法を紹介します。

Linux

cp コマンドの -u オプション

cp コマンドの -u オプションについて。

Linux

Linux でランダムな文字列を生成する

Linux でランダムな文字列を生成する方法を紹介します。