[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

grep【コマンド】

pointこの用語のポイント

pointUNIX系で使えるコマンドだよ

point指定した文字列のある行を検索するよ

スポンサーリンク

簡単に書くよ

grep【コマンド】とは

指定した文字列(のある行)を検索するときに使うコマンド
です。

image piyo

詳しく書くよ

UNIX系(LinuxとかMacとか)で使えます。

書き方は、

grep [オプション] [検索対象文字列(正規表現可)] [対象のファイル名]

です。
オプションはいっぱいあります

オプション説明
-aバイナリファイルテキストファイルとして扱う
-b検索結果の各行の先頭にオフセット数とやらを表示する
-c検索結果にファイル名と行数だけを表示する
-d【動作】対象がディレクトリの場合の処理を指定する
 →「-dread」:ディレクトリをファイルと見なして扱う
 →「-dskip」:ディレクトリを無視する
 →「-drecurse」:ディレクトリの中のファイルを読み込む。「-r」指定時と同じ動き
-e検索する文字列を指定する。省略していーよ
-f検索する文字列をファイルから(1行ずつ)読み込む。ファイルの中身が「aa(改行)bb」の場合、「aa」にマッチする行と「bb」にマッチする行をそれぞれ検索する
-h検索結果にファイル名を表示しない
-i検索する文字列の大文字・小文字を区別しない
-l検索する文字列があるファイルの名前のみを表示する
-n検索結果の各行の先頭に行番号を表示する
-q検索結果を表示しない
-rディレクトリを指定した場合、その中のファイルをそれぞれ検索する。サブディレクトリがある場合はその中も辿る
-sエラーメッセージを表示しない
-v検索する文字列に一致しない行を表示する
-w検索する文字列を単語して含む行を検索する
-x検索する文字列と1行丸々一致する行を検索する
-A【数字】検索する文字列に一致した行と後ろの【数字】行を表示する
-B【数字】検索する文字列に一致した行と前の【数字】行を表示する
-C【数字】検索する文字列に一致した行と前後の【数字】行を表示する
-E検索する文字列に「拡張正規表現」とやらを使えるようになる。正規表現のパワーアップ版ですね
-H検索結果にファイル名を表示する
-Iバイナリファイルを無視する
-L検索する文字列が無いファイルの名前を表示する
-Uバイナリファイルとして扱う
-【数字】検索する文字列に一致した行と前後の【数字】行を表示する

などですね。
オプションは複数組み合わせて指定できます。

「grep」コマンドコマンドライン上から文字列を検索する際に使います。

オプションがげんなりするくらいありますが、あまり気にする必要はありません。
オプションの多くが検索結果の表示内容を切り替えるオプションです。
検索結果の表示系オプションで覚えておくと便利なのは

・「-c」(ファイル名と行数を表示)
・「-l」(ファイル名のみ表示)
・「-n」(行番号を表示)


くらいですかね。
それ以外はあまり使いません。

検索結果の表示系以外のオプションでよく使うのも

・「-i」(大文字・小文字を区別しない)
・「-v」(一致しない行を表示)
・「-E」(拡張正規表現を使う)


くらいです。
これだけ覚えておけば、ほぼ困りません。

「-v」オプションなんて何に使うの?と思うかもしれませんが、意外と便利ですよ。
例えば

grep -v 192.168.1.xx access_log

のように指定して、アクセスログから特定のIPアドレスを除外したい場合などに重宝します。

「grep」の解説でめんどっちー部分に「正規表現」があります。
検索する文字列は正規表現を使うことで曖昧な感じで指定ができるのです。

grepで使える正規表現は
正規表現説明
.任意の1文字
^【文字】【文字】で始まる
【文字】$【文字】で終わる
【文字】*【文字】の0回以上の繰り返し
【文字】\?【文字】が0回、または1回
【文字】?【文字】が0回、または1回(拡張正規表現)
【文字】\+【文字】の1回以上の繰り返し
【文字】+【文字】の1回以上の繰り返し(拡張正規表現)
【文字1】-【文字2】【文字1】から【文字2】の間の任意の文字。「a-z」などと使う
【文字1】\|【文字2】【文字1】もしくは【文字2】
【文字1】|【文字2】【文字1】もしくは【文字2】(拡張正規表現)
[【複数の文字】]【複数の文字】のどれか1文字。「[ade]」や「[a-z0-9]」などと使う
[^【複数の文字】]【複数の文字】以外。「[^ade]」や「[^a-z0-9]」などと使う
【文字】\{【数字】\}【文字】の【数字】回の繰り返し
【文字】{【数字】}【文字】の【数字】回の繰り返し(拡張正規表現)
【文字】\{【数字】,\}【文字】の【数字】回以上の繰り返し
【文字】{【数字】,}【文字】の【数字】回以上の繰り返し(拡張正規表現)
【文字】\{,【数字】\}【文字】の【数字】回以下の繰り返し
【文字】{,【数字】}【文字】の【数字】回以下の繰り返し(拡張正規表現)
【文字】\{【数字1】,【数字1】\}【文字】の【数字1】回以上【数字2】回以下の繰り返し
【文字】{【数字1】,【数字2】}【文字】の【数字1】回以上【数字2】回以下の繰り返し(拡張正規表現)
\(【パターン】\)【パターン】をひとまとまりとして扱う
(【パターン】)【パターン】をひとまとまりとして扱う(拡張正規表現)
などですね
拡張正規表現になると「\」がいらなくなるイメージです。

正規表現を使う際は「'(シングルクォート)」もしくは「"(ダブルクォート)」で囲ってあげないと上手く機能しないのでご注意ください。

grep -E 'a*' hoge.txt

は正規表現として検索されますが

grep -E a* hoge.txt

は期待通りに動作しません。

長くなりましたがそんな感じです。
「grep」コマンドを使うときは、正規表現をきっちりマスターする、あるいは割り切って正規表現を使わないの2択になると思います。
正規表現を使いこなせると便利ですが、正規表現を使わなくても便利なコマンドですよ。

image piyo2

一言でまとめるよ

まぁ「grep」ってコマンドが出てきたら「文字列を検索するときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク