それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

特定の拡張子(*.php)のファイルだけをGrepして検索したい。

コマンドでファイル種類を指定して検索。

phpファイルや、datファイル、rubyファイルなど拡張子を指定して検索したい。

grep DSN . -r --include=*.php

grep のmanにありました。manpage最高


拡張子を指定して、ファイル内検索したい。

EmEditorを始め、WindowsGUIなら一瞬ですよ。
(63b554e94c5bbde540788defe0823b6d)

WindowsGUIなら簡単だけど、Macだと、どうしてこんなに面倒くさいんだ、と思ってました。

いままでこんな風に面倒な事をしていた。

grep -r DSN ./*/*.php

これだと1階層だけしか取れない。

grep -r DSN ./*.php

これだと2階層目だけしか取れない。

grep -r DSN ./*/*.php

これあと3階層目だけしか取れない。

grep -r DSN ./*/*/*.php

組み合わせも面倒だった。

find -exec や xargsと組み合わせると面倒。catだとファイル名が出て来なかった。

なんかもっといい方法ないの。ってずっと思ってました。

行き着いたのが冒頭の方法

例。date関数を使ってるphpファイルを調べあげる。

grep "date('r')" . -r --include=*.php | grep at

grep で、date('r')を再帰的( . -r )に調べるが、phpファイルに限定する(--include=*.php)


これを応用すると、HTMLファイルを階層を潜って調べることが出来る。

manに載ってました。

Man page of GREP

--include=GLOB
ベースネームが GLOB にマッチするファイルのみを検索します (--exclude の項で説明したワイルドカードのマッチングを使用します)。
--exclude=GLOB
ベースネーム (訳注: パスなしのファイル名) が GLOB にマッチするファイルをスキップします (ワイルドカードのマッチングを 使用します)。 GLOB で指定するファイル名には、 *, ?, [...] がワイルドカードとして使えます。 \ を文字の前に置けば、 ワイルドカード文字やバックスラッシュ文字を本来の意味で使用できます。

やっぱりOKWAVEは当てにならないし、馬鹿だった。

linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法 - Linux系OS - 教えて!goo

OKWave消えてくれ。惜しい。でもズレてる。2005年の記事をGoogleで出されてもなぁ。




検索してもOkWaveと知恵袋ばかりですね。
grep 階層 - Google 検索

manpage読んでなかった僕も人のこと言えないけど・・・さ

あえて言わせてもらう。やっぱりOKWAVEは当てにならならい。古い&OKWAVEは検索結果から消えてほしい。回答する前にManpage嫁ってことです。

2015/01/15 追記 それBashでも出来るよ

zsh最強コメントいただいたので、返信しておきます。

特定の拡張子(*.php)のファイルだけをGrepして検索したい。 - ブックマクロ開発に

zsh 使えば % grep hoge **/*.php 出来るし...。

2012/04/20 17:28

zsh 使えば % grep hoge **/*.php 出来るし...。 - shag のコメント / はてなブックマーク


bash 4 以降なら、べつにzshなくても出来る。

shopt -s globstar

これをかけば、globstar使える。

takuya@rena:~/repos/sd$ grep php   **/*.php
php/getMessage.php:1:<?php
php/sendMessage.php:1:<?php

ま、ファイル見るだけってあんまり需要ないから、find と組合せて使うことが多いんだけども。