如何获取第二列和第二行中的数字或返回默认值

时间:2015-03-27 11:53:34

标签: regex linux grep

我坚持使用grep请告诉我一个正则表达式解决方案来获取第二行第二列中的数字

我试图仅为侦听端口获取pid

lsof -i:43458 |grep LISTEN

AND GOT

skype   2680 orangehrm   85u  IPv4  17151      0t0  TCP *:43458 (LISTEN)

但据我所知,我还需要知道如何获取行

示例数据

COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
skype   2680 orangehrm   85u  IPv4  17151      0t0  TCP *:43458 (LISTEN)

skype   2680 orangehrm   86u  IPv4  17152      0t0  UDP *:43458 

2 个答案:

答案 0 :(得分:2)

下面的awk命令将打印第二列if

  1. 该行必须包含字符串LISTEN

  2. 第二列必须包含一个或多个数字

    lsof -i:43458 | awk '/LISTEN/ && $2 ~ /^[0-9]+$/{print $2}'
    
  3. 示例:

    $ cat f
    foo 123 LISTEN
    foo bar LISTEN
    $ awk '/LISTEN/ && $2 ~ /^[0-9]+$/{print $2}' f
    123
    

答案 1 :(得分:2)

使用trcut的另一种解决方案:

lsof -i:43458 | grep LISTEN | tr -s ' ' | cut -d " " -f 2

tr用于删除单词之间的任何额外空格。 cut用于选择所需的字段(此处为第二个字段)。