0

如何使用 sed 转换以下输出?从:

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'

但没有运气!提前感谢您的帮助

4

3 回答 3

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

编辑:要摆脱上面输出中的额外空格,您可以使用:

$ 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
于 2013-07-02T13:32:25.273 回答
1
ifconfig |
awk '
    FNR>1 && /^[^[:space:]]/ {print ""}
    {printf "%s", $0}
    END {print ""}
'
于 2013-07-02T17:25:57.063 回答
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
于 2013-07-02T13:30:19.447 回答