プロのための Linuxシステム・10年効く技術 (Software Design plus)
この本を読んでいたら、以下のような例が出てきた。
ps aux | grep hog[e]
これは hoge
を含むプロセスを抽出しているわけだけど、もしなにも考えなければ、
ps aux | grep hoge
とやるだろうし、やってきた。
最後の [e]
がポイントなわけだが、すこし考えさせられた。
grep では正規表現が使えるので、[e]
は e
にマッチする一文字という意味になる。
これを実行すると、プロセスには grep hog[e]
という文字列で現れることになる。
しかし、hog[e]
という文字列に hog[e]
という正規表現がマッチしないため、grep の結果に grep のプロセスが表示されないということになる、ということだ。
実際手動でなにか見る場合に grep
が巻き込まれてもそれほど害はないし、見ればわかることなのでこのテクニックをわざわざ使うことも無さそう。
だけど、スクリプトで何か処理をしたい場合は、余計なものが結果に混じるのは予期しない動作になりかねないので、そういった場合には役に立ちそうなテクニックです。