2010-06-15 15 views
9

Mam status wyjściowy opiekuna, wyglądający w ten sposób.Parse string z bash i numerem wyciągu

frontend       RUNNING pid 16652, uptime 2:11:17 
nginx       RUNNING pid 16651, uptime 2:11:17 
redis       RUNNING pid 16607, uptime 2:11:32 

Potrzebuję wyodrębnić PID z Nginx. Zrobiłem to za pomocą komendy grep -P, ale na zdalnym komputerze grep jest budowany bez obsługi wyrażeń regularnych perla.

Wygląda na to, że sed lub awk jest dokładnie tym, czego potrzebuję, ale nie znam ich.

Proszę, pomóż mi znaleźć sposób, jak to zrobić, z góry dziękuję.

Odpowiedz

13
sed 's/.*pid \([0-9]*\).*/\1/' 
2
$ cat $your_output | sed -s 's/.*pid \([0-9]\+\),.*/\1/' 
16652 
16651 
16607 
+0

To jest znane jako UUOC (Bezużyteczne użycie kota) – mikerobi

+0

@mikerobi: To był tylko przykład, jak wmieszać rzeczy do dowództwa ... nie powiedział, jak miał swoje wyjścia ... ale cokolwiek . – Stephen

4

Rozwiązanie z awk i pokroić

[email protected]:~$ cat test 
frontend       RUNNING pid 16652, uptime 2:11:17 
nginx       RUNNING pid 16651, uptime 2:11:17 
redis       RUNNING pid 16607, uptime 2:11:32 
[email protected]:~$ awk '{print $4}' test | cut -d, -f 1 
16652 
16651 
16607 

tylko nginx:

[email protected]:~$ grep nginx test | awk '{print $4}' | cut -d, -f 1 
16651 
+1

końcowe oczyszczanie przecinka można wykonać za pomocą: tr -d ',' – Marcin

+0

Dziękuję, @Marcin –

+0

nie ma potrzeby używania awk + cut + grep. Tylko awk wykona robotę. 'awk -F", "'/ nginx/{print $ 1}' file' – ghostdog74

4

pracy z awk sam:

awk -F'[ ,]+' '{print $4}' inputfile 
+0

Działa wspaniale z potokiem: '$ status | grep nginx | ​​awk -F '[,] +' '{print $ 4}' -' – Keith

+2

@Keith: Nie ma potrzeby potokować' grep' do 'awk'. AWK może to zrobić samodzielnie: 'status | awk -F '[,] +' '/ nginx/{print $ 4}' ' –

1

zakładającej że realizacja grep obsługuje opcję -o, można korzystać z dwóch greps:

output \ 
    | grep -o '^nginx[[:space:]]\+[[:upper:]]\+[[:space:]]\+pid [0-9]\+' \ 
    | grep -o '[0-9]\+$' 
2

Spójrz na pgrep, wariant grep specjalnie dostosowane do grepping procesu beztabelkowy.