2015-06-27 75 views
-1

我想只读netstat的第一线,即解释了各列行:读取netstat输出的第一行?

Proto Local Address  Foreign Address State 

然而,当我做到以下几点:

netstat | egrep -i "^\s*(tcp|udp)" | { 
    read line 
    echo 'Here is the first line ' $line 
} 

我只得到了第一个连线:

Here is the first line TCP <Local_addr> <Foreign_addre> ESTABLISHED 

我该如何得到这一行?

我在Windows 7机器上运行Cygwin。谢谢。

+0

我个人不会使用'read'来达到这个目的 - 我会找到一种方法来提取这一行并将其直接赋值给一个变量。例如:'line =“$(netstat -n | sed -n 2p)”' – iscfrc

回答

1

要读取的任何命令的第一输出线,如netstat,入壳可变line,使用:

read -r line < <(netstat| head -n1) 

使用head是没有必要在这里,但它加快东西。

以上的副作用是在将行分配给line之前,删除任何前导或尾随空白。这可能是一个优势。如果您想保留空格,请使用IFS= read -r line < <(netstat| head -n1)

构造< <(...)被称为过程替换。它需要bash或其他高级外壳。请注意,两个<之间的空间是必不可少的。

+0

谢谢,这是一个很好的解释。但是,当我运行这个时,没有任何东西放入“行”中。它什么都不打印。 – Sother

+0

@其他'netstat | head -n1'本身运行产生任何输出? – John1024

+0

'netstat |头-nX',其中X是任何正整数,正确打印出适当的行。但是,当我在bash脚本中运行时,我无法通过'echo'来检索它。 – Sother