2013-07-02 3 views
0

Как преобразовать следующий вывод с помощью sed? от:Как подключить вывод ifconfig к строке для интерфейса

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 
    inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 
    inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 
    groupname mnic_data 

к:

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 groupname mnic_data 

Я попытался

sed -n '/^[a-z]/{x;1!s/\n/ /g;1!p;};H' 

но не повезло! высоко оценивайте вашу помощь

ответ

1
ifconfig | 
awk ' 
    FNR>1 && /^[^[:space:]]/ {print ""} 
    {printf "%s", $0} 
    END {print ""} 
' 
+0

красиво простой. благодаря! – IdaWong

0

это помогает (awk)?

awk '/:/&&f{print ""}{printf "%s", $0;f=1}' 

тест

kent$ echo "lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 
    inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 
    inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 
    groupname mnic_data"|awk '/:/&&f{print ""}{printf "%s", $0;f=1}' 
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 groupname mnic_data 
+0

Если 'ifconfig' испускает адреса ipv6 или адреса mac, у них будут двоеточия. –

2

Вы можете попробовать это:

$ sed -e :a -e '$!N;s/\n//;ta' -e 'P;D' inputfile 
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 groupname mnic_data 

EDIT: Для того, чтобы избавиться от лишних пробелов в выводе выше, вы можете использовать:

$ sed -e :a -e '$!N;s/\n\s\+/ /;ta' -e 'P;D' inputfile 
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2 inet 10.1.1.1 netmask ffffff00 broadcast 10.1.1.255 groupname mnic_data