格式化长单行命令输出

格式化长单行命令输出

我正在研究 Linux 商业路由器之间的 vxlan 隧道。我需要调试一些界面设置。

该命令sudo ip -d link show DEV为我提供了很好的输出,但输出格式就像下面的长单行。

katabey@leaf-1:mgmt:~$ sudo ip -d link show vxlan_10
11: vxlan_10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9216 qdisc noqueue master bridge state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 52:6d:3d:aa:b5:bf brd ff:ff:ff:ff:ff:ff promiscuity 1 minmtu 68 maxmtu 65535 
    vxlan id 10010 local 10.1.1.1 srcport 0 0 dstport 4789 nolearning ttl 64 ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx 
    bridge_slave state forwarding priority 8 cost 100 hairpin off guard off root_block off fastleave off learning off flood on port_id 0x8002 port_no 0x2 designated_port 32770 designated_cost 0 designated_bridge 8000.50:0:0:3:0:3 designated_root 8000.50:0:0:3:0:3 hold_timer    0.00 message_age_timer    0.00 forward_delay_timer    0.00 topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off mcast_router 1 mcast_fast_leave off mcast_flood on neigh_suppress on group_fwd_mask 0x0 group_fwd_mask_str 0x0 group_fwd_maskhi 0x0 group_fwd_maskhi_str 0x0 vlan_tunnel off isolated off addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

如果有这样的输出就太好了

vxlan id 10010
local 10.1.1.1
srcport 0
dstport 4789

我记得几年前,我曾与 Linux 系统工程师一起工作,command | python ...但我无法找到/回忆起该命令。 (我已经安装了Python)。

欢迎任何其他解决方案(尤其是单衬管)。

答案1

尝试:

your-command |grep -Eo '(vxlan id|srcport|dstport) [0-9]+|local [0-9.]+'

答案2

fmt这听起来像是coreutils 一部分的命令的工作。

特别是,您会想要使用

-s,--split-only

分割长线,但不要重新填充

答案3

如果您的实现ip支持--json输出格式开关,那么我建议类似

sudo ip -d link show vxlan_10 | jq -r '.[] | to_entries[] | "\(.key) \(.value)"'

前任。 (我没有 VLAN 接口,因此这显示了常规无线接口):

$ ip --json link show wls1 | jq -r '.[] | to_entries[] | "\(.key) \(.value)"'
ifindex 3
ifname wls1
flags ["BROADCAST","MULTICAST","UP","LOWER_UP"]
mtu 1500
qdisc mq
operstate UP
linkmode DORMANT
group default
txqlen 1000
link_type ether
address 00:21:6a:96:40:12
broadcast ff:ff:ff:ff:ff:ff

相关内容