linux - Bash - 更正格式(sed?)

标签 linux bash

我得到了 IFCONFIG 的输出,我已将其清理为三个主要部分:

1) IFNAME

2) IP 地址

3) 网络掩码

目前这是通过以下字符串完成的:

ifconfig -a | grep eth -A 1 | awk '{print $1,$2,$4}' | sed 's/Link HWaddr//g;s/inet addr\://g;s/Mask\://g;s/\-\-//g;/^$/ d' | grep -v 'UP\|^ '

输出如下所示:

eth0 
192.168.0.60 255.255.255.0
eth1 
1.1.1.1 255.255.255.0
eth2 
eth2:2 
10.2.2.1 255.255.255.0
eth2:3 
10.3.3.1 255.255.255.0
eth2:4 
10.4.4.1 255.255.255.0
eth2:5 
10.5.5.1 255.255.255.0
eth2:6 
10.6.6.1 255.255.255.0
eth2:7 
10.7.7.1 255.255.255.0
eth2:8 
10.8.8.1 255.255.255.0
eth2:9 
10.9.9.1 255.255.255.0
eth2:10 
10.10.10.1 255.255.255.0
eth2:11 
10.11.11.1 255.255.255.0
eth2:12 
10.12.12.1 255.255.255.0
eth2:13 
10.13.13.1 255.255.255.0
eth2:14 
10.14.14.1 255.255.255.0
eth3 
eth3.2 
10.30.30.1 255.255.255.0
eth3.7 
10.33.77.1 255.255.255.0

现在,我有一些问题需要纠正:

1) 我需要将格式设置为 (IFNAME IP 地址网络掩码),这意味着我需要将 IP/网络掩码向上移动一行到其关联的 IF

2) 我想删除当前没有配置的接口(interface)。在上面的示例中,您可以看到 eth2 和 eth3 缺少物理接口(interface)上的配置,并且只有子接口(interface)/vlan 卡在它们之上。

再次感谢您一如既往的帮助!

最佳答案

尝试将以下内容添加到您的命令中:

$ ... | tr -d '\n' | sed 's/eth/\neth/g' | awk 'NF>1'
eth0 192.168.0.60 255.255.255.0
eth1 1.1.1.1 255.255.255.0
eth2:2 10.2.2.1 255.255.255.0
eth2:3 10.3.3.1 255.255.255.0
eth2:4 10.4.4.1 255.255.255.0
eth2:5 10.5.5.1 255.255.255.0
eth2:6 10.6.6.1 255.255.255.0
eth2:7 10.7.7.1 255.255.255.0
eth2:8 10.8.8.1 255.255.255.0
eth2:9 10.9.9.1 255.255.255.0
eth2:10 10.10.10.1 255.255.255.0
eth2:11 10.11.11.1 255.255.255.0
eth2:12 10.12.12.1 255.255.255.0
eth2:13 10.13.13.1 255.255.255.0
eth2:14 10.14.14.1 255.255.255.0
eth3.2 10.30.30.1 255.255.255.0
eth3.7 10.33.77.1 255.255.255.0

它首先删除所有新行,将所有内容集中到一行中,然后使用 sed 根据 eth 字段将其重新分成几行。最后,它使用 awk 仅打印那些具有超过 1 个字段的行。

(但是,我确信您的整个命令可以进一步简化。看起来您的管道太多了!)

关于linux - Bash - 更正格式(sed?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15113989/

相关文章:

C++,当从列表中获取值时,我填充其中的数组没有返回任何内容

linux - 当linux上安装了多个postgresql时,如何添加另一个postgres用户名?

Linux 转发所有系统日志

json - 使用 jq 解析 AWS CLI 的 json 输出

bash - 如何从 Bash 生成 Pusher 身份验证字符串?

linux - 批量文件夹重命名

bash - 将 exec 的输出发送到文件 perl

linux - 将 movflags 添加到 mp4 文件的顶部,而不使用 ffmpeg 进行实时 RTSP 流

linux - 如何循环直到 IP :port is not responding

linux - 我可以避免使用 FIFO 文件加入 Bash 管道的末尾以存储在当前 shell 的变量中吗?