0

我不是 linux shell 命令的大师,我有一点可能了解我的命令有什么问题:

当我运行这个

netstat -lptn | cut -d : -f 2,3,4,5,6,7 

结果是;

Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name
631           0.0.0.0:*               LISTEN      853/cupsd       
445             0.0.0.0:*               LISTEN      803/smbd        
139             0.0.0.0:*               LISTEN      803/smbd        
53            0.0.0.0:*               LISTEN      1394/dnsmasq    
:1:631                 :::*                    LISTEN      853/cupsd       
::445                  :::*                    LISTEN      803/smbd        
::139                  :::*                    LISTEN      803/smbd 

好的,现在我添加额外的命令“awk”来过滤结果:

netstat -lptn | cut -d : -f 2,3,4,5,6,7 |awk 'BEGIN {res="Down"} /^445.*smbd$/ {res=$3} END {print res}

但结果显示down尽管第二行符合模式:

445             0.0.0.0:*               LISTEN      803/smbd        

那么为什么我不能有好的结果呢?

4

1 回答 1

2

你有

/^445.*smbd$/

但看看第二行,后面有空格/制表符smbd。所以它不会匹配。

尝试这个:

.......|awk 'BEGIN {res="Down"} /^445.*smbd\s*$/ {res=$3} END {print res}'

以您的示例数据作为输入,上面的 awk 打印

LISTEN
于 2013-03-12T15:11:32.517 回答