Posted at

Linux grepコマンドと正規表現


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で終わるファイルを検索している。