55380


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

[code]

    ps -ax | grep [e]macs
    
[/code]

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


CC BY-SA 4.0
2019-05-30T23:35:54.403
55379
2019-05-30T23:35:54.403
19110
question
shellscript grep
grepで[こ]んな感じに1文字だけ角括弧で囲う意味は何ですか？


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

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

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

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

[code]

    $ 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
    
[/code]


CC BY-SA 4.0
2019-05-30T23:35:54.403
55380
2019-05-30T23:35:54.403
19110
55379
answer