テキストを検索する: grep

初級84

`grep` を使ってファイルの中から必要な語句を探す基本を学ぶレッスンです。

grep: ファイルの中から文字を探す

$ grep "Linux" hello.txt
Hello, Linux!

基本形は次の通りです。

$ grep <探したい文字> <ファイル名>

よく使うオプション

オプション意味
INLINE0大文字小文字を区別しない
INLINE1ディレクトリを再帰的に検索する
INLINE2行番号を表示する

$ grep -i "hello" hello.txt
$ grep "Sales" documents/report.txt

ディレクトリごと探す

ファイル名が分からないときは -r でディレクトリ全体を対象にできます。

どのファイルの何行目に見つかったかを知りたいので、-n と一緒に使うのが定番です。

$ grep -rn "TODO" documents
documents/report.txt:12:TODO: 数字を更新する

探し方のコツ

- 空白や記号を含む語grep "Not Found" system.log のように引用符で囲みます。

- 一致した行を数えたい ときは -c一致しない行を見たい ときは -v を使います。

- ファイル名だけ知りたい ときは -l を付けると、中身ではなく該当ファイルの一覧が出ます。

よくあるつまずき

- 何も表示されない — 一致が無いだけで、エラーではありません。-i で大文字小文字を無視すると見つかることがあります。

- 引数の順番を逆にする — 先に探したい文字、後にファイル名です。

- Is a directory と出る — ディレクトリを指定したときは -r が必要です。

実務での使いどころ

障害調査では tail で直近のログを眺め、当たりが付いたら grep で該当行だけを抜き出す、

という流れが基本です。設定ファイルの中から特定の項目を探すときにも、

grep -rn "timeout" /etc のように使えます。

user@dojo:/home/user
user@dojo:/home/user$
練習問題 — 0/4 完了 (0/65pt)
`hello.txt` から `Linux` を検索してください。
15pt
`documents/report.txt` から `Sales` を検索してください。
15pt
`hello.txt` から `hello` を大文字小文字を無視して検索してください。
20pt
`/etc/passwd` から `user` を検索してください。
15pt