grepで.svnフォルダ以外のファイルから検索したい場合の書き方を教えてください。

↓のようにhogehogeという文字列を検索したいと思います。
grep -rC1 'hogehoge' *

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/01/12 00:49:31
  • 終了:2007/01/19 00:50:03

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/01/12 01:13:05

ポイント35pt

grep 自体にはその機能は無いので、

find . -type f ! -path '*/.svn/*' -print0 | xargs -0 grep -C1 'hogehoge'

とします。

http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html

http://www.linux.or.jp/JM/html/GNU_findutils/man1/xargs.1.html

id:openseed No.2

openseed回答回数51ベストアンサー獲得回数62007/01/12 02:17:31

ポイント35pt

b-wind さんの回答で目的は達成されると思いますが、別解であると信じて・・・。

find . | grep -v '/.svn/' | xargs grep -C1 'hogehoge'

一度、find コマンドで /.svn/ を含まない一覧を作成し、xargs コマンドを利用して、それぞれのファイル毎に、 grep コマンドを実行してます。

xargsコマンドは、grep 以外でも、汎用的に利用できますので、便利です。

http://www.linux.or.jp/JM/html/GNU_findutils/man1/xargs.1.html

参考まで。

  • id:b-wind
    > find . | grep -v '/.svn/' | xargs grep -C1 'hogehoge'
    それでは改行を含んだファイル名を処理できない。
    というのは冗談で、普通にやるならそれで十分。わかりやすいし。
    ただ、-type f は付けとかないとディレクトリまで処理しますよ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません