Linux一行程序返回eth名称、ip、mac和子网

Linux一行程序返回eth名称、ip、mac和子网,linux,bash,awk,Linux,Bash,Awk,我一直在尝试将两个查询合并为一个查询。我正在尝试获取IP信息的输出,该输出将与针对主机文件的另一个查询进行比较,并最终转储到数据库中。我的命令必须是简单的一行程序,因为它们是如何部署的。我可以用这两种方法得到我所需要的,但是有没有办法把它们结合起来。ip show输出多行输出,但不确定如何组合这些行 ip -o addr show | awk '/inet/ {print $9, $4}' | grep -v '127.0.0.1' ip -o addr show | awk '/link/ {

我一直在尝试将两个查询合并为一个查询。我正在尝试获取IP信息的输出,该输出将与针对主机文件的另一个查询进行比较,并最终转储到数据库中。我的命令必须是简单的一行程序,因为它们是如何部署的。我可以用这两种方法得到我所需要的,但是有没有办法把它们结合起来。ip show输出多行输出,但不确定如何组合这些行

ip -o addr show | awk '/inet/ {print $9, $4}' | grep -v '127.0.0.1'
ip -o addr show | awk '/link/ {print $2, $13}' | grep -v lo
顶部提供大部分信息,底部获得mac。这两者都有,但它是多行的,所以不确定如何提取出我需要的值。有什么好的想法或技巧吗?在linux/bash上仍然是新的

 ip -o addr show | grep -i 'ether\|inet'
ip-oaddrshow命令的示例

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN \            link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
1: lo    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
2: eth0    inet x.x.x.x/24 brd x.x.x.x scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: eth1    inet x.x.x.x/24 brd x.x.x.x scope global eth1
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: eth2    inet x.x.x.x/27 brd x.x.x.x scope global eth2
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
6: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
6: eth4    inet x.x.x.x/24 brd x.x.x.x scope global eth4
7: eth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
7: eth5    inet x.x.x.x/24 brd x.x.x.x scope global eth5
8: eth6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
8: eth6    inet x.x.x.x/28 brd x.x.x.x scope global eth6
9: eth7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000\    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
1:lo:mtu 16436 qdisc noqueue状态未知\link/loopback 00:00:00:00:00 brd 00:00:00:00:00:00
1:lo inet 127.0.0.1/8示波器主机lo
2:eth0:mtu 1500 qdisc mq状态更新qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
2:eth0 inet x.x.x/24 brd x.x.x.x作用域全局eth0
3:eth1:mtu 1500 qdisc mq state UP qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3:eth1 inet x.x.x/24 brd x.x.x.x作用域全局eth1
4:eth2:mtu 1500 qdisc mq状态更新qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4:eth2 inet x.x.x/27 brd x.x.x.x作用域全局eth2
5:eth3:mtu 1500 qdisc noop状态关闭qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff:ff
6:eth4:mtu 1500 qdisc mq状态更新qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
6:eth4 inet x.x.x/24 brd x.x.x.x范围全局eth4
7:eth5:mtu 1500 qdisc mq状态更新qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
7:eth5 inet x.x.x/24 brd x.x.x.x作用域全局eth5
8:eth6:mtu 1500 qdisc mq状态更新qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
8:eth6 inet x.x.x/28 brd x.x.x.x范围全局eth6
9:eth7:mtu 1500 qdisc noop状态关闭qlen 1000\link/ether xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff:ff

尝试使用egrep而不是grep

ip -o addr show | egrep -i "ether|inet" 

这不是100%的准确度,但它与您的输入相符:

ip -o addr show | awk '/inet/ && !/127.0.0.1/ {print $9, $4} /link/ && ! /lo/ {print $2, $13}'
如果要在一行上输出, 然后可以将上述命令包装在
echo$(…)
中,如下所示:

echo $(ip -o addr show | awk '/inet/ && !/127.0.0.1/ {print $9, $4} /link/ && ! /lo/ {print $2, $13}')

这会在ip-o addr show上返回相同的值,但会丢失第一条环回行。这肯定更接近我所寻找的。但仍然是多行输出。我不确定是否有办法解决这个问题。Janos谢谢你的更新。这很有帮助。您的问题是显示给定输入的预期输出,因此我们不会猜测。Stack Overflow是一个用于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。也看到