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つの方法が見つかりました。
> pgrep -f "otp.*place1"
2345
私はずっと前に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)