4

Linux ボックスで次の grep を実行すると、次のようになります。

$ ps -ef | grep bash
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash
wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto bash

「bash」という単語が grep の引数に含まれているため、最後の行は grep 自体を報告していることに注意してください。

しかし、代わりに「bash」で任意の文字を [] で囲むと、次のようになります。

$ ps -ef | grep ba[s]h
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

今回はgrepの情報なし!

では、検索語 (つまり正規表現) 内の文字を角かっこで囲むと、grep が自分自身をここに報告しないのはなぜでしょうか? [s] は、「文字「s」で構成される [] で囲まれたセットの任意の文字」を意味していました。

4

2 に答える 2

6

これは、式ba[s]h(または、または...) が(または、または...)ではなく、[b]ash単に一致するためです。bashba[s]h[b]ash

したがって、grepコマンドは次のすべての行を探していますbash

root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash

しかし

wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto ba[s]h

は正確ではないため、一致しませんbash

于 2013-06-14T13:09:06.270 に答える
1

Fedorquiは、文字クラスのトリックの説明でそれを釘付けにします。コマンド-vのオプションを使用する方法は、すでに知っている方法よりも少し長くなりますが、私が頻繁に使用する別の方法を指摘したかっただけです。grep

ps -ef | grep bash | grep -v grep
于 2013-06-14T23:09:46.717 に答える