2013-02-21 35 views
0

过滤命令只返回段有没有办法只返回第二或使用grep第三,第四段,awk ...?通过输出中

我怎样才能获得lo段落,我知道这是可能的使用命令ifconfig lo但如何使用,如果其他命令。从ifconfig输出是:

eth0  Link encap:Ethernet HWaddr 00:25:22:b2:8b:0d 
      inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0 
      inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:100979 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1 
      collisions:0 txqueuelen:1000 
      RX bytes:129240044 (129.2 MB) TX bytes:7355272 (7.3 MB) 
      Interrupt:29 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:16436 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

回答

3

您可以轻松地通过使用awk要么号段或接口名称进行筛选。

,第一款数字只是指定纪录awk 'NR==1' RS=''

# First record 
$ ifconfig | awk 'NR==1' RS='' 
eth0  Link encap:Ethernet HWaddr 00:25:22:b2:8b:0d 
      inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0 
      inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:100979 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1 
      collisions:0 txqueuelen:1000 
      RX bytes:129240044 (129.2 MB) TX bytes:7355272 (7.3 MB) 
      Interrupt:29 

# Second Record    
$ ifconfig | awk 'NR==2' RS='' 
lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:16436 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

如果你想通过接口名称来过滤,而不是记录编号,然后​​3210:

# Interface lo 
$ ifconfig | awk '$1=="lo"' RS='' 
lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:16436 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

# Interface eth0               
$ ifconfig | awk '$1=="eth0"' RS='' 
eth0  Link encap:Ethernet HWaddr 00:25:22:b2:8b:0d 
      inet addr:192.168.1.22 Bcast:192.168.1.255 Mask:255.255.255.0 
      inet6 addr: fe80::225:22ff:feb2:8b0d/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:100979 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:70753 errors:0 dropped:0 overruns:0 carrier:1 
      collisions:0 txqueuelen:1000 
      RX bytes:129240044 (129.2 MB) TX bytes:7355272 (7.3 MB) 
      Interrupt:29 

但我不知道是什么ifconfig eth0ifconfig lo错误。

0

使用awk:

BEGIN { 
    RS = "" 
} 

NR == 3 { 
    print 
    exit 
} 

,打印第三段。将“3”更改为任何你喜欢的。请注意,将记录分隔符设置为空字符串可以使awk在段落上工作,而不是像往常一样工作。

您可以像这样运行:

awk -f above.awk input.txt 
+1

你可以改变'NR == 3'到'/^LO [\ t] + /'(我不能在AWK使用'\ s'?)打印有关段落以' “LO”'。 – 244an 2013-02-21 12:53:19

+0

\ s是简写的POSIX字符类的一些工具实现[[:空间:]] - 始终使用[[:空间:]],你不会得到惊喜。 – 2013-02-21 13:36:38

+0

顺便说一句,你不需要“+”自1或更多的包括1,所以如果你有'lo'后面有一个空格,它可以重新匹配。无论如何,在这种情况下'$ 1 ==“lo”'可能更清晰。 – 2013-02-21 15:44:53

0

使用pattern range,这里是一个使用sed的一种方式。它也将删除最后一个空行:

ifconfig | sed -n '/^lo/,/^$/ { /^$/!p }' 

awk解决方案:

ifconfig | awk '$1=="lo"' RS=