Lから始まるLinux

2章54話
正規表現
2章55話 grepコマンド
もくじ
2章56話
sedコマンド
grep コマンド
若木 みどり
お兄ちゃん! 今回は正規表現を 使ったコマンドを 教えてくれるんだよね?
若木 しげる
そうだよ! 今回は grep を学ぼう!
使い方
若木 しげる
grep はファイルの内容から 指定された正規表現を検索して マッチした行を表示してくれるよ!
grep [オプション]... 正規表現 [ファイル]
オプション役割
-E, --extended-regexp拡張正規表現を使って検索(+? などが使える)
-F, --fixed-strings正規表現を使わず指定された文字列で検索
-o, --only-matching「マッチした行」の代わりに「正規表現にマッチした箇所」を表示
-c, --count「マッチした行」の代わりに「正規表現にマッチした件数」を表示
-l, --files-with-matches「マッチした行」の代わりに「正規表現にマッチする内容を持つファイル」を表示
-L, --files-without-match「マッチした行」の代わりに「正規表現にマッチしない内容を持つファイル」を表示
-m 回数, --max-count=回数ファイル内で指定された回数マッチした時点で終了
-q, --quiet, --silent結果を表示しない
-s, --no-messagesエラーメッセージを表示しない
若木 みどり(驚き)
ファイルの内容を自分の目で調べなくても良くなるね!
若木 しげる
正規表現はシェルで特殊な意味を持つ記号を多く使うよなので正規表現は「シングルクォート(')」囲うことが多いんだ
若木 みどり
わかった!正規表現はなるべくシングルクォートで囲うね
若木 しげる
grep は指定された正規表現が見つかったら「成功」見つからなかったら「失敗」を返すよこのことを利用して条件判定にも使えるんだ
若木 みどり(笑顔)
面白そうなコマンドだね!
実践
若木 しげる
/etc/passwd ファイルを検索してみようユーザ情報が保管されている設定ファイルなんだ
若木 しげる
「コロン(:)」区切りで情報が格納されていて最初がユーザ名になっているよ
cat /etc/passwd
若木 みどり
実際に見るのが理解しやすいよね!
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
shigeru:x:1000:1000:Shigeru Wakagi:/home/shigeru:/bin/bash
midori:x:1001:1001:Midori Wakagi:/home/midori:/bin/bash
若木 みどり
確かに「コロン(:)」区切りで色々な情報があって最初がユーザ名のようだね!
若木 しげる
この中から midori ユーザの情報だけを表示したい場合にはどうすればいいだろう?
若木 みどり
これではどうかな?
grep 'midori' /etc/passwd
若木 しげる
確かに見つかるねだけど最初のユーザ名以外の場所にmidori という文字列が入っているとその行も一緒に表示されてしまうよ
若木 しげる
ユーザ名が先頭に書かれていることを利用しよう!
若木 みどり
それならこれでどうかな?
grep '^midori' /etc/passwd
若木 しげる
さっきよりもいいね!でも midoriiro ユーザのようにmidori から始まっているユーザの行も引っかかって表示されてしまうんだこうのような場合を避けるにはどうしたらいいんだろう?
若木 しげる
ヒントは「情報はコロン(:)で区切られている」だよ
若木 みどり(驚き)
あっ!それならこうだよね!
grep '^midori:' /etc/passwd
若木 しげる(笑顔)
よくできました!
若木 しげる
grep はこのように正規表現を指定して調べたい文字列を探すことができるよ
まとめ
若木 みどり
今回は文字列検索コマンドgrep を学んだよ!
若木 しげる
grep で見つけた内容をパイプで別コマンド渡して加工するなどさらに高度な使い方もできるんだまずは文字列を探すコマンドとして慣れていこう!