Reputation: 5022
I've got supervisor's status output, looking like this.
frontend RUNNING pid 16652, uptime 2:11:17
nginx RUNNING pid 16651, uptime 2:11:17
redis RUNNING pid 16607, uptime 2:11:32
I need to extract nginx's PID. I've done it via grep -P command, but on remote machine grep is build without perl regular expression support.
Looks like sed or awk is exactly what I need, but I don't familiar with them.
Please help me to find a way how to do it, thanks in advance.
Upvotes: 21
Views: 42102
Reputation: 53966
Take a look at pgrep, a variant of grep specially tailored for grepping process tabless.
Upvotes: 2
Reputation: 24034
assuming that the grep implementation supports the -o
option, you could use two greps:
output \
| grep -o '^nginx[[:space:]]\+[[:upper:]]\+[[:space:]]\+pid [0-9]\+' \
| grep -o '[0-9]\+$'
Upvotes: 1
Reputation: 340171
Solution with awk and cut
vinko@parrot:~$ 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
vinko@parrot:~$ awk '{print $4}' test | cut -d, -f 1
16652
16651
16607
for nginx only:
vinko@parrot:~$ grep nginx test | awk '{print $4}' | cut -d, -f 1
16651
Upvotes: 6
Reputation: 49156
$ cat $your_output | sed -s 's/.*pid \([0-9]\+\),.*/\1/'
16652
16651
16607
Upvotes: 8