psとgrepを組み合わせた時にgrepのプロセスを除きたいとき

この本を読んでいたら、そのままではないが以下のような例が出てきた。

ps aux | grep hog[e]

これは hoge を含むプロセスを抽出しているわけだけど、もしなにも考えなければ

ps aux | grep hoge

とやるだろうし、やってきた。

最後の [e] がポイントなわけだが、すこし考えさせられた。

grep では正規表現が使えるので、[e] は e にマッチする一文字という意味になる。

これを実行すると、プロセスには grep hog[e] という文字列で現れることになる。

しかし、hog[e] という文字列に hog[e] という正規表現がマッチしないため、grep の結果に grep のプロセスが表示されないということになる、ということだ。

実際手動でなにか見る場合に grep が巻き込まれてもそれほど害はないし、わかることなのでこのテクニックをわざわざ使うことも無さそうだけど、

スクリプトで何か処理をしたい場合は余計なものが結果に混じるのは予期しない動作になりかねないので、そういった場合には役に立ちそうなテクニックです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする