【コマンドライン】テキストの文字検索 [ grep ]

【コマンドライン】テキストの文字検索 [ grep ]

コマンドラインのテキスト中の文字を検索するgrepコマンドについて解説します。

検証環境

grepコマンド

grepコマンドは“テキスト中の文字を検索するコマンド”です。

正規表現を使った柔軟な文字検索を行うことができます。

基本書式

$ grep [オプション] [検索文字(正規表現)] [ファイル|ディレクトリ]

オプション

主なオプションは次の通りです。

オプション 内容
-i 大文字と小文字を区別しない
-E 拡張正規表現を使う
-n 行番号を表示
-l ファイル名のみ表示
-h ファイル名を非表示
-r ディレクトリ内を再帰的に検索
-L ヒットしないファイルを表示

引数

検索文字(正規表現)

検索文字は正規表現の文字列です。

ファイル|ディレクトリ

検索対象のファイルまたはディレクトリのパスです。

サンプル

オプションなし

$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep This sample/memo.txt 
___ih_hl_end
This is a pen.

複数ファイルの検索

$ ls sample
draftA.txt  draftB.txt  memo.txt
$ cat sample/draftA.txt 
Good Morning!
$ cat sample/draftB.txt 
Good Afternoon!
$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep Good sample/*
___ih_hl_end
sample/draftA.txt:Good Morning!
sample/draftB.txt:Good Afternoon!

*はワイルドカードと呼ぶ、全てに一致する意味を持つ文字です。

そのため、sample/*sampleディレクトリの全内容(draftA.txtdraftB.txtmemo.txt)を指します。

大文字と小文字の区別なし

$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -i This sample/memo.txt 
___ih_hl_end
This is a pen.
this is a fish.

拡張正規表現の使用

拡張正規表現はより通常の正規表現よりも高度な正規表現です。

$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -E "This|Hello" sample/memo.txt 
___ih_hl_end
Hello World!
This is a pen.

行番号の表示

$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -n is sample/memo.txt 
___ih_hl_end
2:This is a pen.
3:Apple is delicious.
4:this is a fish.

ファイル名のみ表示

$ ls sample
draftA.txt  draftB.txt  memo.txt
$ cat sample/draftA.txt 
Good Morning!
$ cat sample/draftB.txt 
Good Afternoon!
$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -l Good sample/*
___ih_hl_end
sample/draftA.txt
sample/draftB.txt

ファイル名を非表示

$ ls sample
draftA.txt  draftB.txt  memo.txt
$ cat sample/draftA.txt 
Good Morning!
$ cat sample/draftB.txt 
Good Afternoon!
$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -h Good sample/*
___ih_hl_end
Good Morning!
Good Afternoon!

ディレクトリ内を再帰的に検索

$ ls sample
draftA.txt  draftB.txt  memo.txt  test
$ ls sample/test
draftC.txt
$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
$ cat sample/draftA.txt 
Good Morning!
$ cat sample/draftB.txt 
Good Afternoon!
$ cat sample/test/draftC.txt 
Good Night!
___ih_hl_start
$ grep -r Good sample
___ih_hl_end
sample/draftB.txt:Good Afternoon!
sample/test/draftC.txt:Good Night!
sample/draftA.txt:Good Morning!

ヒットしないファイルを表示

$ ls sample
draftA.txt  draftB.txt  memo.txt
$ cat sample/draftA.txt 
Good Morning!
$ cat sample/draftB.txt 
Good Afternoon!
$ cat sample/memo.txt 
Hello World!
This is a pen.
Apple is delicious.
this is a fish.
___ih_hl_start
$ grep -L Good sample/*
___ih_hl_end
sample/memo.txt

マニュアル

コマンドの仕様(主な処理やオプション・引数など)は環境により異なる場合がございます。

利用環境での仕様は『コマンドのマニュアルを表示する』manコマンド等で確認しましょう。