【コマンドライン】テキストの文字検索 [ 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.txt
、draftB.txt
、memo.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コマンド等で確認しましょう。