_ また耳の聞こえが悪くなった…。
_ 検索パターンをファイルから読む。
パターンは標準入力からも食える。% grep -f pattern filenameファイルが圧縮されてるなら zgrep の出番。% cat pattern | grep -f - filenameが、こいつはうまくいかないことがある。% zgrep -f pattern filename.gz% cat pattern | zgrep -f - filename.gz_ zgrep って、sh スクリプトで書かれてるものと、C で書かれてるものと2通りある。sh で書かれてるものは、要するに内部的に zcat filename.gz | grep -options pattern となるように書き換えてるだけ。よって zgrep -f - filename.gz は内部的には zcat filename.gz | grep -f - というコマンドを実行することになり、つまり grep は検索パターンも検索対象もどっちも標準入力から読めという無茶を要求されることになる。動くわけがない。
_ 具体的には、圧縮済みの古いログから条件にマッチしたものを抽出するのに、
みたいなことをやりたい機会がけっこうあるんだよね。sh で書かれた zgrep はこれがちゃんと動いてくれないから困る。bash/zsh ならば、% (なんか実行してキーワードを出力) | zfgrep -f - hoge.log.*.gzのように無理をすればまあできなくもないんだけれど。$ zgrep -f <(command) filename.gz_ でも、C で実装されてる zgrep は、内部的な動作が異なっていて、このような使い方をしてもまったく問題なく動く。近所を見回してみたところではそういう zgrep は FreeBSD と OSX ぐらいしかなさげで、むしろこっちの方が例外っぽいんだけど、ほかの実装もマネしてくれないですかねぇ。