すがブロ

sugamasaoのhatenablogだよ

忘年会しても忘れてはいけない便利最高grepオプション

grep -o

これです。おじさんになっても恥ずかしがらずにこういうのを書いていくのが重要かなと思うようになりました。

-oを使うと、その引数にマッチした文字列のみ出力できます。 例えば、こんなアクセスログがあったとして……

xxx.xxx.xxx.xxx - - [26/Dec/2014:18:59:12 +0000] "HEAD /login.do HTTP/1.0" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
xxx.xxx.xxx.xxx - - [26/Dec/2014:18:59:15 +0000] "HEAD /login.action HTTP/1.0" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
xxx.xxx.xxx.xxx - - [26/Dec/2014:18:59:16 +0000] "HEAD /index.action HTTP/1.0" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
xxx.xxx.xxx.xxx - - [26/Dec/2014:18:59:17 +0000] "HEAD /struts2.action HTTP/1.0" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
xxx.xxx.xxx.xxx - - [26/Dec/2014:18:59:18 +0000] "HEAD /root.action HTTP/1.0" 404 0 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)"
xxx.xxx.xxx.xxx - - [26/Dec/2014:19:50:15 +0000] "HEAD / HTTP/1.1" 302 0 "-" "Hatena Antenna/0.5 (http://a.hatena.ne.jp/help)"
xxx.xxx.xxx.xxx - - [27/Dec/2014:02:18:38 +0000] "HEAD / HTTP/1.1" 302 0 "-" "Hatena Antenna/0.5 (http://a.hatena.ne.jp/help)"
xxx.xxx.xxx.xxx - - [27/Dec/2014:08:44:14 +0000] "HEAD / HTTP/1.1" 302 0 "-" "Hatena Antenna/0.5 (http://a.hatena.ne.jp/help)"

UAがHatena Antennaが来ている時のアクセス時間を知りたいぞい!とか思うとするじゃないですか。こんな感じにしたら、grepだけでも十分なのだった……!!!!!!!

$ grep "Hatena Antenna" /var/log/nginx/access.log | grep -Eo [0-9]{2}:[0-9]{2}:[0-9]{2}
14:08:19
14:08:19
14:15:00
14:15:00
 :

この例では-Eを併用して正規表現を使っているけど、例えばegrep -o ナントカみたいにしても良い。

便利ですね。

grepの戻り値あるいは -q

grepって、文字列が引っかかるかどうかで戻り値が変化するんですね。つまり戻り値を確認するだけで値が存在しているか確認できるというわけです。

$  echo foo | grep foo
foo
$  echo $?
0
$  echo hoge | grep foo
$  echo $?
1

さらに、-qを使うと、ヒットした文字列を出力しないので、より明示的に"このgrepは文字列の存在確認をしているのだ"というのが強調されるのと、自動化するときに標準出力が挟まってきてダルいみたいなことを回避できます。

$  echo foo | grep -q foo
$  echo $?
0

便利ですね。

どうしても書かなくてはいけない宣伝

またかって感じかもしれませんが、よろしくお願い致します。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

あと、一時期パーフェクトRubyを始めとするパーフェクトシリーズのKindle版がamazonから姿を消していましたが、今日確認したら掲載されていましたので、買う機会を逃していた皆様はぜひお買い求めください*1

パーフェクトRuby

パーフェクトRuby

パーフェクトRuby on Rails

パーフェクトRuby on Rails

購入の際は紙かKindleか念のため確認してくださいね。

*1:インデントが破滅していた問題の対応をしていたっぽいですね