使用bash和提取数字解析字符串

cle*_*leg 14 regex unix bash parsing

我有主管的状态输出,看起来像这样.

frontend                         RUNNING    pid 16652, uptime 2:11:17
nginx                            RUNNING    pid 16651, uptime 2:11:17
redis                            RUNNING    pid 16607, uptime 2:11:32
Run Code Online (Sandbox Code Playgroud)

我需要提取nginx的PID.我已经通过grep -P命令完成了它,但是在远程机器上grep是在没有perl正则表达式支持的情况下构建的.

看起来sed或awk正是我需要的,但我不熟悉它们.

请提前帮助我找一个怎么做的方法.

rek*_*o_t 16

sed 's/.*pid \([0-9]*\).*/\1/'
Run Code Online (Sandbox Code Playgroud)

  • 为了使它起作用,您需要指定启用扩展正则表达式的选项。通常是'-r'(GNU sed)或'-E'(BSD sed)。参见:/sf/ask/1164645961/ (2认同)

Pau*_*ce. 6

单独使用AWK:

awk -F'[ ,]+' '{print $4}' inputfile
Run Code Online (Sandbox Code Playgroud)

  • @Keith:没有必要将`grep`传递给`awk`.AWK可以自己完成所有工作:`status | awk -F'[,] +''/ nginx/{print $ 4}'` (2认同)

Ste*_*hen 5

$ cat $your_output | sed -s 's/.*pid \([0-9]\+\),.*/\1/'
16652
16651
16607
Run Code Online (Sandbox Code Playgroud)


Vin*_*vic 5

用awk和切割解决方案

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
Run Code Online (Sandbox Code Playgroud)

仅适用于nginx:

vinko@parrot:~$ grep nginx test | awk '{print $4}' | cut -d, -f 1
16651
Run Code Online (Sandbox Code Playgroud)