web-dev-qa-db-ja.com

pgrepは複数の単語を検索します

pgrepを使用して、いくつかの単語を含む実行中のプロセスを検索しています

> pgrep -f "otp"
2345
2343

複数のプロセスが識別されます。コマンドラインには、正確なプロセスに焦点を合わせるのに役立つ別のWordがあります。だから、私は2つの用語を検索したいのですが、両方ともそこにあるはずです。残念ながら、私は次のようなORの組み合わせの例とヘルプしか見ていません:

> pgrep -f "otp|place1"
2345
2343
3632

OR条件であるため、これは機能しません。検索パターンにAND条件が必要です。

pgrepリファレンス: https://linux.die.net/man/1/pgrep

pattern:プロセス名またはコマンドラインと照合するための拡張正規表現を指定します。

Pgrepを使用して、ORではなくANDの組み合わせで2つの単語を検索するにはどうすればよいですか?

1
Nikhil VJ

単語を.*で区切るという条件で、1つの方法が見つかりました。

> pgrep -f "otp.*place1"
2345
0
Nikhil VJ

私はずっと前にpgrepをあきらめました。それが最終的になるものよりももっと役立つはずだといつも思われていました。

これが私が使っているものです。少し長蛇の列ができていて、もっと良い方法があるはずだといつも思っていたので、誰かが私たち両方を啓発できるかもしれません。

egrepは、拡張正規表現を使用したフィルタリングを可能にします。これは、「1つの回答」のみが必要な場合に重要になります。 grep -Eも同じことをするはずですが、* nixの複数のフレーバーで機能するソリューションが必要だったため、egrepを使用する習慣がありました。

-eフラグは、psにすべてのプロセスを表示するように指示します(実行ユーザーの許可を得て実行されます。つまり、rootでない限り、すべてのprocが表示されるわけではありません)。 -fフラグは、psに「フルフォーマット」リストを発行するように指示します。これは、表示するときに| lessする必要がある場合があります。これは、CLI引数が長くなると、ターミナルの右側からスクロールオフする可能性があり、ラップ。それが役に立てば幸い。

agettyに一致するプロセスを検索します

# ps -ef | egrep agetty
root      1386     1  0 Sep19 ttyS0    00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root      1388     1  0 Sep19 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
root     28332  4228  0 11:23 pts/2    00:00:00 grep -E agetty

agettyも含まれているbaudに一致するプロセスを検索します:

# ps -ef | egrep 'agetty.*baud'
root      1386     1  0 Sep19 ttyS0    00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root     28347  4228  0 11:23 pts/2    00:00:00 grep -E agetty.*baud

私のgrepプロセスを返さないでください。どのように機能するかはわかりませんが、結果を| grep -v 'grep'する必要がなくなります。誰かがこれを説明できるかもしれません:

# ps -ef | egrep 'agetty.*b[a]ud'
root      1386     1  0 Sep19 ttyS0    00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220

egrep with OR condition

# ps -ef | egrep '(ag[e]tty|ac[p]id)'
root       944     1  0 Sep19 ?        00:00:00 /usr/sbin/acpid
root      1386     1  0 Sep19 ttyS0    00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root      1388     1  0 Sep19 tty1     00:00:00 /sbin/agetty --noclear tty1 linux
root     28395  4228  0 11:28 pts/2    00:00:00 grep -E (agetty|acpid)
1
Server Fault