grep -o
これです。おじさんになっても恥ずかしがらずにこういうのを書いていくのが重要かなと思うようになりました。
おじさん、grep -oを知りました
— IT業界のマー君 (@sugamasao) 2014, 12月 26
-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の戻り値で値が存在するかどうか判断できるのを今になって知りました
— IT業界のマー君 (@sugamasao) 2014, 12月 1
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)
- 作者: 和田裕介,石田絢一(uzulla),すがわらまさのり,斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/11
- メディア: 大型本
- この商品を含むブログ (5件) を見る
あと、一時期パーフェクトRubyを始めとするパーフェクトシリーズのKindle版がamazonから姿を消していましたが、今日確認したら掲載されていましたので、買う機会を逃していた皆様はぜひお買い求めください*1。
- 作者: Rubyサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2014/10/31
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/10/31
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
購入の際は紙かKindleか念のため確認してくださいね。
*1:インデントが破滅していた問題の対応をしていたっぽいですね