Formatando ifconfig usando sed / awk

2

Estou usando ifconfig no OpenSUSE. Quando eu corro ifconfig eth0 eu recebo

eth0  Link encap:Ethernet  HWaddr CE:FD:75:DF:A5:6D
      inet addr:172.16.4.177  Bcast:172.16.5.255  Mask:255.255.254.0
      inet6 addr: fe80::adfd:75ef:fedf:v56d/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:11812456 errors:0 dropped:2 overruns:0 frame:0
      TX packets:7000495 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:2591436376 (2471.3 Mb)  TX bytes:9196901478 (8770.8 Mb)

Estou tentando formatar isso para que cada parâmetro seja retornado em uma nova linha usando sed ou awk , por exemplo:

   eth0  
         Link encap:Ethernet
         HWaddr CE:FD:75:DF:A5:6D
         inet addr:172.16.4.177  
         Bcast:172.16.5.255  
         Mask:255.255.254.0
         inet6 addr: fe80::adfd:75ef:fedf:v56d/64 
         Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  
         Metric:1
         RX packets:11812456 
         errors:0 
         dropped:2
         overruns:0 
         frame:0
         TX packets:7000495 
         errors:0
         dropped:0 
         overruns:0 
         carrier:0
         collisions:0
         txqueuelen:1000
         RX bytes:2591436376 (2471.3 Mb)
         TX bytes:9196901478 (8770.8 Mb)

Eu tentei ifconfig eth0 | sed 's/ /\r/' , mas isso não parece se dividir no espaço duplo.

    
por Kiksy 21.01.2015 / 12:58

2 respostas

1

Você pode começar com

sed 's/\(:[^: ]\+\) \([^(]\)/\n/g;s/\()\)/\n/;s/^ \+//'

deve estar perto o suficiente e, muito provavelmente, pode ser simplificado e otimizado ainda mais. O resultado:

eth0  Link encap:Ethernet
 HWaddr CE:FD:75:DF:A5:6D
inet addr:172.16.4.177
 Bcast:172.16.5.255
 Mask:255.255.254.0
inet6 addr: fe80::adfd:75ef:fedf:v56d/64
Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500
 Metric:1
RX packets:11812456
errors:0
dropped:2
overruns:0
frame:0
TX packets:7000495
errors:0
dropped:0
overruns:0
carrier:0
collisions:0
txqueuelen:1000
RX bytes:2591436376 (2471.3 Mb)
  TX bytes:9196901478 (8770.8 Mb)
    
por 21.01.2015 / 13:37
0

O script a seguir usou a substituição intermediária para o símbolo = (você está livre para mudar para qualquer pessoa que desejar):

#!/bin/sed -f
s/\s\+\s/=/g
/:[^=:]\+:/s/:[^=:]\+ /&=/g
s/^=/\t/
s/ *=$//
s/ *=/\n\t/g

Então

ifconfig eth0 | sed -f script.above

saídas:

eth0
    Link encap:Ethernet
    HWaddr 74:2f:68:8b:b8:6e
    inet addr:192.168.1.247
    Bcast:192.168.1.255
    Mask:255.255.255.224
    inet6 addr: fe80::762f:68ff:fe8b:b86e/64
    Scope:Link
    UP BROADCAST RUNNING MULTICAST
    MTU:1500
    Metric:1
    RX packets:3128543
    errors:0
    dropped:1
    overruns:0
    frame:0
    TX packets:1346967
    errors:0
    dropped:0
    overruns:0
    carrier:0
    collisions:0
    txqueuelen:1000
    RX bytes:4538616348 (4.5 GB)
    TX bytes:118149772 (118.1 MB)
    
por 21.01.2015 / 15:27