30代SEの広く浅く技術メモ ~ z/OSからWindows,Linuxまで

日々の仕事を通して知った、ちょっとした小技や技術的な情報を備忘録も兼ねて残していくブログです

grep テキスト検索に使える便利なコマンド

ハード障害や、ソフト障害のどちらが起きても大変なことですが、
発生後に、膨大なOSやアプリケーションのログから原因を究明するのは非常に困難です。

そんなときに、役に立つのが「grep」コマンドです。

必要なファイルのみをフィルタリングしたり、
「|(パイプ)」を使用して複数のgrepの処理をつなげることで、
不要なメッセージを除外したりいろんなことができます。

また、正規表現も使用する事ができるので、「grep」を自由自在に操ることができれば、
自分の探したい事にたどり着くまでの時間が相当早くなると思います。

以下、grepコマンドのオプションです。
ぜひいろいろと試してください。

grepコマンドオプション

  • n 該当する行が何行目か表示
  • A x 該当する行の後x行を表示
  • B x 該当する行の前x行を表示
  • h ファイル名を表示しない

■検索対象の語句を除外するには
grep -v "Linux" ./test.txt
で検索。
※検索対象の「test.txt」から「Linux」という語句以外を標準出力。

■単語の完全一致で検索したいときは
grep -w "Linux" /tmp/*
で検索。

■大文字と小文字の区別をなくしたいときは
grep -i "Linux" /tmp/*
で検索。

■サブディレクトリ以下も再帰的に検索したい場合
grep -r "Linux" /tmp/*

以下、grep --help で表示される使用法です。

正規表現の選択と解釈方法:
-E, --extended-regexp 「パターン」を拡張された正規表現とする
-F, --fixed-strings 「パターン」を改行で区切られた固定の文字列とする
-G, --basic-regexp 「パターン」を基本的な正規表現とする
-P, --perl-regexp 「パターン」をPerl正規表現とする
-e, --regexp=パターン 正規表現に指定パターンを使う
-f, --file=ファイル 「パターン」を指定ファイルから読む
-i, --ignore-case 大文字/小文字を無視する
-w, --word-regexp 「パターン」一致を単語全体(単語単位)で行なう
-x, --line-regexp 「パターン」一致を行全体(行単位)で行なう
-z, --null-data 出力を改行でなく、ヌル値のバイトで区切る

その他:
-s, --no-messages エラー・メッセージを抑止する
-v, --invert-match 一致しない行を対象にする
-V --version バージョン情報を標準出力に表示して終了する
--help 使い方を標準出力に表示する
--mmap もし可能なら、入力をメモリー・マップする

出力制御:
-m, --max-count=回数 指定した一致回数の後、終了する
-b, --byte-offset 出力行にバイト・オフセットも表示する
-n, --line-number 出力行に行数も表示する
--line-buffered 行ごとに出力を掃き出す
-H, --with-filename 各一致にたいしてそのファイル名も表示する
-h, --no-filename 前のファイル名を出力から抑止する
--label=ラベル ラベルをファイル名として標準出力に表示する
-o, --only-matching パターンと一致する行の部分だけを示す
-q, --quiet, --silent 通常の出力をすべて抑止する
--binary-files=型 バイナリー・ファイルの型。「binary」
「text」「without-match」を指定
-a, --text --binary-files=textと同じ
-I --binary-files=without-matchと同じ
-d, --directories=操作 ディレクトリーへの操作
「read」(読込み)、「recurse」(再帰)、
「skip」(省略) のいずれかを指定
-D, --devices=操作 デバイスFIFO、ソケットへの操作
「read」か「skip」を指定
-R, -r, --recursive --directories=recurseと同じ
--include=パターン パターンと一致するファイルを検査する
--exclude=パターン パターンと一致するファイルを省略する。
--exclude-from=ファイル 指定したファイル内のパターンと
一致するファイルを省略する。
-L, --files-without-match 一致のなかったファイル名のみを表示する
-l, --files-with-matches 一致したファイル名のみを表示する
-c, --count ファイルごとに一致した行数のみを表示する
-Z, --null ファイル名の後に、ヌル値のバイトを表示

前後関係の制御:
-B, --before-context=数 一致前の「数」行も出力する
-A, --after-context=数 一致後の「数」行も出力する
-C, --context=行数 一致前後の指定行数の内容も出力する
-行数 --context=行数 と同じ
--color[=場合]
--colour[=場合] 一致する文字列を目立たせるマーカーを使う
「場合」には、「always」「never」「auto」を指定。
-U, --binary EOLでのCR文字を取り省かない(MS-DOS)
-u, --unix-byte-offsets CR文字がないものとしてオフセットを
出力する(MS-DOS)

「egrep」は「grep -E」のことです。「fgrep」は「grep -F」のことです。
「ファイル」の指定がなかったり、「ファイル」に「-」を指定したりすると、
標準入力から読み込みます。「ファイル」の個数が1以下の場合、-hと仮定します。
もし一致があると0で、ないと1で、障害があると2で、終了します。