2013-09-29 10 views
12

Używam tego polecenia, aby uzyskać identyfikator procesu innego polecenia:ps aux | grep zwraca PID dla siebie zbyt

ps aux | grep 7000.conf | awk '{print $2}' 

ten powróci dwa PID:

7731 
22125 

Chcę tylko pierwszy z nich. Drugi to PID dla grep w powyższym poleceniu. Z góry dziękuję każdemu, kto wie, jak zmienić powyższe polecenie, aby zwrócić tylko pierwszy pid.

p.s. otwarta na nowe polecenie, że robi to samo

Odpowiedz

17

W tym konkretnym przypadku ucieczki . co zakładam, że miał zrobić powinno działać:

ps aux | grep '7000\.conf' | awk '{print $2}' 

Alternatywnie wykluczyć grep:

ps aux | grep 7000.conf | grep -v grep | awk '{print $2}' 
+0

Nie jest łatwiejszy w użyciu niż 'ps aux | grep -v '7000.conf''. Nie ma potrzeby podwójnego grep ani awk. -v po prostu "usuwa się z wyniku podczas robienia grep". – erm3nda

+1

@ erm3nda: '-v' oznacza" odwrócić dopasowanie ", dzięki czemu nie znajdziesz tego, czego szukasz, przede wszystkim w' 7000.conf' - znajdzie każdy inny proces. 'awk' jest również częścią pierwotnego pytania i nie ma związku z usunięciem' grep' (wyodrębnia pid z wiersza). Więc nie. – Ryan

+0

Masz rację. Dziękuję Ci. – erm3nda

5

ps aux | grep "[7]000.conf" będzie działać również.

+0

To jest fajne. Czy możesz wyjaśnić, jak to działa? – DiegoSalazar

+1

Sprawdź http://stackoverflow.com/a/9375940/2599522 dla wyjaśnienia;) – user2599522

Powiązane problemy