1

Linux の出力から特定の文字列を抽出しようとしています

例えば:

ps -eo pid,args | grep PRD_ | egrep startscen.sh | more

次の出力が得られます

http://i.imgur.com/reS7wZ1.png

(フルサイズ画像: http://i.imgur.com/reS7wZ1.png )

awk、sed、tr を使用して PID などの詳細を抽出できることは承知していますが、4 番目の列に「PROCESS_ALL_BETS」のような特定の文字列がある行の pid を正確に取得するクエリを作成する方法がわかりません。

または、_NAME= の後のすべての文字を抽出するにはどうすればよいですか?

4

1 に答える 1

1

救助に行きます。

ps -eo pid,args | awk '/PRD_/ && /startscen\.sh/ && $4 ~ /PROCESS_ALLBETS/'

(画像には がPROCESS_ALLBETSあるので、テキストには と書かれていますが、実際にはそれが必要だと思いますPROCESS_ALL_BETS。)

これにより、次のすべての条件に一致するすべての行が印刷対象として選択されます。

  • /PRD_/-- 行のどこかに「PRD_」があります。$6 ~ /^-NAME=PRD_/たぶん、6 番目のフィールドの先頭でのみ一致するように、これを引き締めるでしょう。
  • /stratscen\.sh/-- 行のどこかにこの正規表現に一致するものがあります。繰り返しますが、精度を向上させるために、完全一致のみが必要な場合$3 ~ /startscen\.sh/でも、これを orに変更することをお勧めします。$3 == "startscen.sh"
  • $4 ~ /PROCESS_ALLBETS/-- 4 番目のフィールドは、この正規表現と一致します。

上記は、一致するすべての行を単純に出力します。プレフィックスを削除して最初のフィールドと 8 つのフィールドだけを印刷するには、次の-SESSION_NAME=ようなものを追加します。

{ n=$8; sub(/^-SESSION_NAME=/,"",n); print $1, n }

終了の一重引用符の直前。

于 2013-10-22T06:33:20.720 に答える