find&grepクックブック

とかあったらいいなと思いつつ、自分用のメモです。

find

apply.cがどこにあるか探したい。findのnameオプションで探す。

/Users/yasuhisa/Downloads/R-2.8.0/src% find . -name apply.c  
./main/apply.c
正規表現を混じえて、検索したい

Rだとapply、tapplyなどのapplyファミリーがあるが、まとめて場所を探してきたい。

/Users/yasuhisa/Downloads/R-2.8.0/src% find . -regex ".*apply.*"
./library/base/man/apply.Rd
./library/base/man/eapply.Rd
./library/base/man/lapply.Rd
./library/base/man/mapply.Rd
./library/base/man/rapply.Rd
./library/base/man/tapply.Rd
./library/base/R/apply.R
./library/base/R/eapply.R
./library/base/R/lapply.R
./library/base/R/mapply.R
./library/base/R/sapply.R
./library/base/R/tapply.R
./library/stats/man/dendrapply.Rd
./library/stats/man/kernapply.Rd
./main/apply.c
./main/apply.d
./main/apply.o
./main/mapply.c
./main/mapply.d
./main/mapply.o
Macでfindの結果をxargsに渡す時には

空白が問題となる時があるらしいので、

find . -type f -name '*~'  -print0 | xargs -0 rm 

という感じでやったほうがいいらしい。

grep

$ grep[オプション][検索文字列][ファイル名]
/Users/yasuhisa/Downloads/R-2.8.0/src/main% grep sapply *.c        
logic.c:	   avoid warnings with empty lists coming from sapply */
logic.c:	       then sapply was often what was intended. */
行番号も一緒に表示する
/Users/yasuhisa/Downloads/R-2.8.0/src/main% grep -n sapply *.c 
logic.c:378:	   avoid warnings with empty lists coming from sapply */
logic.c:386:	       then sapply was often what was intended. */
一致したファイル名のみ表示する
/Users/yasuhisa/Downloads/R-2.8.0/src/main% grep -l sapply *.c 
logic.c
ファイル名は表示させたくない
/Users/yasuhisa/hatena/syou6162/diary% grep -h id:wakuteka *.txt | head -n 3
-午後にid:wakutekaと会った
-<del>id:hogelog((この前のコメント欄によれば))</del>とid:wakutekaのLTっぽい感じのお話し
-id:wakuteka
一致した数をファイルごとに知りたい
/Users/yasuhisa/hatena/syou6162/diary% grep -c id:wakuteka *.txt | tail -n 7 
2008-12-17.txt:0
2008-12-18.txt:0
2008-12-19.txt:0
2008-12-20.txt:16
config.txt:0
cookie.txt:0
touch.txt:0
/Users/yasuhisa/hatena/syou6162/diary% grep -ch id:wakuteka *.txt | sort -n | uniq
0
1
2
3
17