我想知道如何使用 sed 通过 IP 地址进行查询,它会显示正在使用它的接口名称。
例如..
ipconfig -a | grep 10.0.0.10
我希望它能带着 ETH0 回来
ifconfig | grep -B1 10.0.0.10 | grep -o "^\w*"
ip -br -4 a sh | grep 10.0.0.10 | awk '{print $1}'
你应该使用这个命令:
ifconfig | grep -B1 "inet addr:10.0.0.10" | awk '$1!="inet" && $1!="--" {print $1}'
希望这有帮助!
如果您想要 sed 特定的解决方案,您可以尝试这个。理解它是如何工作的有点困难,但最终这个组合起作用了。
ifconfig | sed -n '/addr:10.0.0.10/{g;H;p};H;x' | awk '{print $1}'
如果您想通过脚本将其作为参数,请使用“$1”左右,而不是 10.0.0.10。
Sed 手册供参考:http://www.gnu.org/software/sed/manual/sed.html#tail
在
iproute2-4.14.0
中,他们添加了 -json
参数:
[公告] iproute2 4.14.1
ip:添加新的命令行参数-json(与-color互斥)
ip: ipaddress.c: 添加对json输出的支持
这些天(
6.11.0
)你可以做:
$ ip -json address \
| jq -r 'map(select((.addr_info | first).local == "192.168.122.5"))[0].ifname'
br-433ed67eb05d
ip -json address
输出的形式为:
[
{
"ifname": "br-433ed67eb05d",
"addr_info": [
{
"local": "192.168.122.5",
...
}
],
...
},
...
]
map(f)
将 f
应用于输入数组的项目 ({"ifname": ...}
)。如果 select(f)
是该输入的
{"ifname": ...}
,则 f
返回其输入 (true
)。 (.addr_info | first).local
是 local
中第 first 项的 .addr_info
字段。然后 [0].ifname
使其返回第一个结果的 ifname
字段,并且 -r
按原样输出字符串,而不是作为 JSON 值(带引号)。
或者以不太可靠的方式:
$ ip address | grep -FB2 'inet 192.168.122.5' | head -1 \
| awk '{print $2}' | sed -E 's/:$//'
br-433ed67eb05d
-br[ief]
解决方案已经发布,所以我只想提一下它(-br[ief]
)已添加到4.2.0
中:
[公告] iproute2 4.2.0
添加对链接和地址的简短输出的支持
并且
sh
(ip -br -4 a sh
) 是可选的。