grepで[こ]んな感じに1文字だけ角括弧で囲う意味は何ですか?

投稿者: Anonymous

他の人が、次のように1文字だけ角括弧で囲んで grep コマンドを実行しているのを見ました。

ps -ax | grep [e]macs

単に grep emacs と実行するのとどう違うのでしょうか?

解決

[こ]のように書くことで、grep プロセス自身が検索にひっかからなくなります。

grep は正規表現をサポートしているので、角括弧を使ってたとえば [abc]macs と書くと amacs, bmacs, cmacs にマッチします。今回のように1文字だけ指定して [e]macs と書くと、マッチとしては emacs と書くのと同じ動作をします。

ところでこの正規表現は grep が解釈するものでシェルが解釈するものではないので、ps -ax の出力にも [e]macs と表示されます。したがってこれ自体は [e]macs というパターンにマッチしません。

このため、[e]macs をパターンとして使うと検索を実行している grep プロセス自体が表示されなくなり、紛らわしさが減ります。

$ ps -ax | grep emacs
  154 ?        Ss     0:00 emacs --daemon
 5502 tty1     R      0:00 grep --color=auto emacs
$ ps -ax | grep [e]macs
  154 ?        Ss     0:00 emacs --daemon
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *