2004年01月06日(火) [長年日記]
■ [unix][howto] カレントディレクトリから再帰的に辿って文字列の検索をする
定番だけれどすぐ忘れるのでメモしておく。find を覚えられないんだよな。
grep -r 文字列 .
が一番簡単。ただ、検索対象のファイルを絞り込めないのでカレント以下にファイルがたくさんある場合は不便。また、-r オプションがサポートされていない場合もある。
find . -name '*.c' -print | xargs grep 文字列
のようにすれば検索対象のファイルを絞り込める。find で検索対象を絞り込み、その結果を xargs を使って grep に渡している。手元の環境では「-print」を書かなくても動いた。
find . -name '*.c' -exec grep 文字列 {} \; -print
のようにすれば xargs がない場合でもOK。が、「{} \;」のようなおまじないが必要になるので覚えにくい。この場合は「-print」を書かないとだめ(ファイル名が表示されない。grepの実装に依存するのだろうが)。
■ [c] …
プログラムが動かなくて ずーーーーーーーーーーーーーーーーーーーーーっと調べていた。結局、
malloc(size);
とすべき所を
malloc(sizeof size);
と書き間違えていたのが原因だった。何度も何度も何度もソースを見直したのに何故に気付かないのだ。もーーー。
何を教訓とすればいいのだろうか。gdbでステップ実行しているときに気付いたので、はまったらステップ実行せよ、ということか。普通だ。
■ [c][howto] gdb
せっかくなのでこれまたすぐ忘れるgdbの使い方をメモ。
gdb 実行プログラム
でgdb起動。起動したら
(gdb) break 関数名
でブレイクポイントを設定。
(gdb) run 引数
でプログラム開始。ブレイクポイントを設定してあればそこで止まる。
(gdb) step
でステップ実行。これは関数の中に入っていく。関数の中に入りたくないときは
(gdb) next
とする。
(gdb) print 変数名
で変数の内容を表示できる。
(gdb) list
で周辺のソースを表示できる。
(gdb) continue
で次のブレークポイントまで一気に進む。
(gdb) quit
でgdb終了。
とりあえずこれくらいしか使わなかった。
■ 生活
- おや、Googleのデザインが変わっている。
「grep 文字列 aFile」 <br>と 「grep -h 文字列 someFiles」 <br>と 「grep 文字列 aFile /dev/null」の違いかな。参考<br>http://homepage3.nifty.com/ymakise/old/unixtips/general.html
/dev/null を書く理由はファイル名を表示させるためなのですね。なるほど。