サーバー上で多くのJavaプロセスが実行されており、これは開発サーバーであるため、複数の環境が実行されています。
特定の環境のプロセスを一覧表示する場合は、javaコマンドがパラメータが多くてかなり長いため、これを読みやすい短いリストを提供するようにします。
ps -ef|grep ENV-NAME|grep -v grep|awk '{print $2 " " $32}'
これにより、実行中のJavaクラスのプロセスIDと名前が印刷されます。
ただし、ご存知のように、これは常に同じ列(32)のJavaクラス名に依存します。
プロセスの1つにパラメータを追加すると、明らかに間違った列が選択され、プロセスのリストはもはや意味がありません。
Javaクラス名は常にcom.company.start.name
。
列番号の代わりに正規表現を使用して正しい列を選択するために、awkでこの情報を使用できますか?
答え1
正規表現に基づいて正確に列を選択することはできませんが、次のようにできます。
ps -ef | awk ' /[E]NV-NAME/{ match($0, /[a-z]+\.[a-z]+\.[a-z]+\.[a-z]+/); print( $2 " " substr($0, RSTART, RLENGTH)) }'
読みやすくするためにgrepを削除し、複数行に変更しました。これらすべてを関数にキャプチャしたいかもしれません。
PS:私は最初にawk正規表現に触れたので、この説明を改善することができますmatch
。
PPSこの[E]NV-NAME
構文は、正規表現が出力ps
で自己一致するのを防ぐのに便利な近道です。grep
皮肉なことに、この特定のタスクには実際に必要でも有用でもありません。