2013年11月19日火曜日

特定の文字列を含まないファイルを検索する.

LaTeXのソースファイルで特定のパッケージ(hogeとする)を含んでいないファイルをリストアップさせようと思ったが,

$ find . -name "*.tex" | xargs grep -l "usepackage" | xargs grep -lv "hoge"

としてもうまく検索できなかった(余計なファイルが複数リストアップされた).理由がわからず,しばらく考え込んでいたが,そもそも grep は行検索を行うので,これでは

*.tex というファイル名で,usepackageという文字列を含むを含み,hogeという文字列を含まないを含むファイル(何を言ってるのか分かりにくい)

を,要するにhogeが含まれない行があるファイルを,検索していたので,例えば空行が一つでもあればヒットするような検索になっていた.

こんなときはどうするのかと思って調べるとちゃんとオプションが用意されており,Lオプションで検索できるらしい.

$ find . -name "*.tex" | xargs grep -l "usepackage" | xargs grep -L "hoge"

これにて一見落着.100個ぐらいリストアップされてたファイルを20個くらいに減らせた.さらにパッケージの追加も sed を使って行ったのでエディタを全く使わずにファイルを編集できた.(すばらっ)

こう考えると,オプションとして -lv を指定するっ機会ってほとんど無いような・・・(いや,そんなこともないか)




0 件のコメント:

コメントを投稿