こんにちは マネックスラボのMです。
今日はgrepについて語っていきたいと思います。
マネックスラボではMONEX VIEW、MONEX VISON、MONEX 投資力診断などのサービスを開発していますが
開発の過程でデータ確認を行うことがよくあります。そして私はデータ確認にLinuxコマンドを多用します。
grepはデータ確認に限らず、ログの確認なんかにも多用するかと思います。
例えば、こういうJSONデータがあった場合
"product":{"apple":{"name":"apple","shop":"shop1","price":100},"apple":{"name":"apple","shop":"shop10","price":110},"orange":{"name":"orange","shop":"shop2","price":90},"grape":{"name":"grape","shop":"shop3","price":200}}appleのデータを抽出しようとして
$ grep apple data1 "product":{"apple":{"name":"apple","shop":"shop1","price":100},"apple":{"name":"apple","shop":"shop10","price":110},"orange":{"name":"orange","shop":"shop2","price":90},"grape":{"name":"grape","shop":"shop3","price":200}}うん、まぁそうじゃないんだけど、、そうなるよね。となります。
ここで活躍するのが -o
オプションです。
-o Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
というわけで、一致した部分だけを出力してくれます。
$ grep -o apple data1 apple apple apple appleこれでは全然嬉しくないので、周辺を出すために正規表現なんかを取り入れたいです。
それが
-P
になるんですが、-P
を使わなくても.
や*
は簡単に使わせてくれます。
$ grep -o apple............................................. data1 apple":{"name":"apple","shop":"shop1","price":100} apple":{"name":"apple","shop":"shop10","price":110少し良くなりましたね。簡単な抽出目的ならこれで十分そうです。
でも少しかっこ悪いので、いよいよ
-P
を使ってみます。
$ grep -oP '"apple":{(.*?)}' data1 "apple":{"name":"apple","shop":"shop1","price":100} "apple":{"name":"apple","shop":"shop10","price":110}完璧です。軽く脳汁出ちゃいますね。快適なgrepライフをお送りください。
前回のawkについての記事はコチラ blog.tech-monex.com