2013-08-06 9 views
5

bekomme ich folgende Meldung, wenn ich ein tun "ps -ef | grep port"Parsing ps und grep Ausgabe in der Schale

apache 6215  1 0 11:20 ?  00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8 

Gibt es eine Möglichkeit, die folgenden zu analysieren:

  • Start Zeit (11:20)
  • sn (4123E)
  • SKU (HSME01-HW)
  • -Port (8)
+3

Der "Grep" sollte nicht im Titel sein, aber das ist kein Grund zu -1 ein Neuling, anstatt seine Frage zu beantworten! – saeedgnu

+0

Es geht eher darum, "wie viele verschiedene Wege es gibt, die Ergebnisse zu analysieren" als "Gibt es einen Weg, dies zu tun". –

+0

Sie könnten 'ps -eo start_time, args' ein wenig leichter zu parsen –

Antwort

7

können Sie awk sowohl für die Filterung und Analyse verwenden:

ps -ef | awk '/[p]ort/ {printf "start time: %s\nsn: %s\nsku: %s\nport: %s\n", $5, $11, $13, $NF}' 

Wie Glenn Jackman in den Kommentaren darauf hingewiesen hat, verhindern die eckigen Klammern in der Filterzeichenfolge, dass der Ausdruck mit der Filterzeichenfolge selbst in der Prozessliste übereinstimmt.

+2

Da dies auch die awk Befehl aus der PS-Ausgabe wählen, verwenden Sie'/[p] ort/', –

+0

@ glennjackman Guter Punkt zu filtern. Fest. –

+0

Danke Ansgar. Könnte mir jemand erklären, was die $ 5, $ 11, $ 13, $ NF bedeuten oder entsprechen? – Jeremy

3

Da die Frage, wie bash markiert ist, bash-only solutions (kein awk oder perl) unter Verwendung bevorzugt wird ...

LINE='apache 6215  1 0 11:20 ?  00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8' 

## Convert string to bash array 
ARR=($LINE) 

echo "start time (${ARR[4]})" 
echo "sn (${ARR[10]})" 
echo "sku (${ARR[12]})" 
echo "port (${ARR[14]})" 

## How to save the value? 
START_TIME=${ARR[4]}