grepコマンド
ファイルの中からデータを検索する。
|(パイプ)grepとすることで標準入力から入ったデータに対して検索を行うことができる。
grep [オプション] 検索条件 [指定ファイル]
正規表現
正規表現を用いることでより高度な検索をすることができる。
^ →行頭を表す
$ →行末を表す
. →任意の一字を意味する
* →直前文字の 0 回以上の繰り返しを意味する
[...] →.. の中の任意の一字を意味する
[^...] →.. の文字が含まれないことを意味する。
¥ →正規表現の記号をエスケープする。
ex)
$ grep ^xy /etc/*
:
/etc/services:xyplex-mux 173/tcp
上記のコマンドは/etc配下にあるファイルで行頭がxyで始まるものを検索している。
オプション
-e
文字列を検索パターンとして扱う
-i
検索パターンと入力ファイルの双方で英大文字と小文字の区別をしない
-v
検索パターンとマッチしなかった行を選択する
ex)
$ grep -i hostname /etc/*
(/etc ディレクトリにある、大文字または小文字の hostname という文字列を含むファイル)
/etc/rc.sysinit: HOSTNAME=localhost
(略)
/etc/rc.sysinit: # Reset the hostname.
(略)
$ grep abc /etc/* | grep -v tcp
(/etc ディレクトリにある、 abc という文字列を含むが tcp という文字列は含まないファイル)
(略)
/etc/services:abcvoice-port 3781/udp # ABCvoice server port
またよく使う例として、標準出力に対してgrepで検索をかけることが多い。
ex)
$ ls /usr/bin/ | grep -e d$
:
:
xxd
yppasswd
/user/binにあるコマンドを一覧表示(標準出力)し、その中からファイル名がdで終わるファイルを検索している。