1

私は正規表現の専門家ではありませんが、基本は理解できたと思います。私はこの構文の使用について言及したチュートリアルを読んでいました:

$ ps -ewwo pid,args | grep [s]sh

SSHDが実行されているかどうかを判別します。

最初のsが角かっこで囲まれている理由がわかりません。私はそれを考えてssh同じ[s]sh結果をもたらすでしょうが、実際には異なる結果が得られます。

$ ps -ewwo pid,args | grep [s]sh
 1258 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
 2988 /usr/sbin/sshd -D

$ ps -ewwo pid,args | grep ssh
 1258 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
 2988 /usr/sbin/sshd -D
 3082 grep --color=auto ssh

では、なぜ2番目の例で3番目の結果が見つかるのでしょうか。

ありがとう!

4

3 に答える 3

6

正規表現はまったく同じ文字列のセット[a]bcabc一致しますが、コマンドライン引数がコマンドgrepの出力に表示されるため、異なるデータに適用されていますps

を使用する[a]bcと、リテラル文字列"[a]bc"がpsの出力に表示されます。これは正規表現と一致しません[a]bc

アイデアは、grepコマンド自体の行と一致しないようにすることです。

于 2012-07-04T06:01:12.300 に答える
1

にパイプpsするgrepと、実行grep中のプロセスが見つかることがよくあります。これは、用語がプログラム名に存在し、一致する可能性が高いためです。

于 2012-07-04T05:57:28.130 に答える
1

角かっこは文字クラスですが、1文字で繰り返しが指定されていない文字クラスを持つことは実際には意味がありません。

異なる結果が得られる理由はssh、プロセスリスト内のgrep引数自体と一致しますが、それ[s]sh自体とは一致しないためです。

于 2012-07-04T06:02:07.520 に答える