2013-09-29 9 views
12

ich diesen Befehl bin mit der Prozess-ID eines anderen Befehls zu erhalten:ps aux | grep gibt pid für sich zu

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

Diese zwei PIDs zurück:

7731 
22125 

Ich möchte nur das erste. Die zweite ist die PID für grep in dem obigen Befehl. Vielen Dank im Voraus an jeden, der weiß, wie man den obigen Befehl ändert, um nur die erste PID zurückzugeben.

p.s. offen für einen neuen Befehl, der die gleiche Sache

Antwort

17

In diesem speziellen Fall hat die . zu entkommen, was ich nehme an, es war funktionieren soll vorhatte:

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

Alternativ ausschließen grep:

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

Ist nicht einfacher zu verwenden nur 'ps aux | grep -v '7000.conf''. Keine Notwendigkeit für Doppel Grep noch awk. -v macht nur "sich selbst aus dem Ergebnis entfernen, wenn Sie Grep". – erm3nda

+1

@ erm3nda: '-v' bedeutet" invertiere die Übereinstimmung ", damit du mit' 7000.conf' nicht das findest, wonach du suchst - es wird jeden anderen Prozess finden. "awk" ist auch Teil der ursprünglichen Frage und hat nichts damit zu tun, 'grep' zu entfernen (es extrahiert die pid aus der Zeile). Also, nein. – Ryan

+0

Sie haben Recht. Danke. – erm3nda

5

ps aux | grep "[7]000.conf" wird auch funktionieren.

+0

Das ist cool. Kannst du erklären, wie es funktioniert? – DiegoSalazar

+1

Check out http://Stackoverflow.com/a/9375940/2599522 für eine Erklärung;) – user2599522

Verwandte Themen