我有主管的状态输出,看起来像这样。
frontend RUNNING pid 16652, uptime 2:11:17
nginx RUNNING pid 16651, uptime 2:11:17
redis RUNNING pid 16607, uptime 2:11:32
我需要提取nginx的PID。我已经通过grep -P命令完成了它,但是在远程机器上grep是在没有perl正则表达式支持的情况下构建的。
看起来sed或awk正是我需要的,但我不熟悉它们。
请提前帮助我找一个怎么做的方法。
答案 0 :(得分:14)
sed 's/.*pid \([0-9]*\).*/\1/'
答案 1 :(得分:6)
单独使用AWK:
awk -F'[ ,]+' '{print $4}' inputfile
答案 2 :(得分:5)
使用awk和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
仅适用于nginx:
vinko@parrot:~$ grep nginx test | awk '{print $4}' | cut -d, -f 1
16651
答案 3 :(得分:2)
$ cat $your_output | sed -s 's/.*pid \([0-9]\+\),.*/\1/'
16652
16651
16607
答案 4 :(得分:2)
看一下pgrep,这是一个专为grepping过程表而量身定制的grep变体。
答案 5 :(得分:1)
假设grep实现支持-o
选项,您可以使用两个greps:
output \
| grep -o '^nginx[[:space:]]\+[[:upper:]]\+[[:space:]]\+pid [0-9]\+' \
| grep -o '[0-9]\+$'