如何仅从 Linux 中的 ip addr 检索 IPV4
How to retrieve only the IPV4 from ip addr in Linux
我正在尝试将 tun0
接口的 IPV4 传递到脚本中。
./start.sh `ip addr | grep tun0 | grep inet`
我遇到的问题是我想不出如何将其进一步分离以获得 10.10.14.252
。
inet 10.10.14.252/23 scope global tun0
感谢任何帮助,也许使用 sed
仅检索 10.10.14.252
。 IPV4 是动态的,脚本可以在任何环境下执行,不一定总是以 10.10
开头
ip addr | grep tun0|grep inet|tr ' ' "\n"|grep 10.|tr '/' "\n"|grep 10
这有效,它很长但有效。但是我能保证 IPV4 总是以 10 开头吗?
试试 Awk。
ip addr |
awk '/inet/ && /tun0/ {
ip = ; sub(/\/.*/, "", ip); print ip }'
通常,如果您有一个 grep
进入 sed
或 Awk 的管道,get rid of the grep
.
一个 sed
使用 ip 地址捕获组的想法:
$ ip addr | sed -En '/inet .* tun0/{s/^inet ([^ /]*).*//p}'
注意: 假定 ip 地址紧跟在 inet
字符串之后,然后是 space 或正斜杠
出于测试目的,我们假设 ip addr > ip.out
生成:
$ cat ip.out
some stuff on line 1
inet 10.10.14.252/23 scope global tun0
some stuff on line 3
正在模拟 ip addr
:
$ cat ip.out | sed -En '/inet .* tun0/{s/^inet ([^ /]*).*//p}'
10.10.14.252
将 jq
与 ip -json
一起使用:
$ ip -j -4 -o addr | jq -r '.[] | select(.addr_info[].dev=="tun0") | .addr_info[].local'
我建议:
ip -o -4 addr list tun0 | awk -F ' *|/' '{print }'
我正在尝试将 tun0
接口的 IPV4 传递到脚本中。
./start.sh `ip addr | grep tun0 | grep inet`
我遇到的问题是我想不出如何将其进一步分离以获得 10.10.14.252
。
inet 10.10.14.252/23 scope global tun0
感谢任何帮助,也许使用 sed
仅检索 10.10.14.252
。 IPV4 是动态的,脚本可以在任何环境下执行,不一定总是以 10.10
ip addr | grep tun0|grep inet|tr ' ' "\n"|grep 10.|tr '/' "\n"|grep 10
这有效,它很长但有效。但是我能保证 IPV4 总是以 10 开头吗?
试试 Awk。
ip addr |
awk '/inet/ && /tun0/ {
ip = ; sub(/\/.*/, "", ip); print ip }'
通常,如果您有一个 grep
进入 sed
或 Awk 的管道,get rid of the grep
.
一个 sed
使用 ip 地址捕获组的想法:
$ ip addr | sed -En '/inet .* tun0/{s/^inet ([^ /]*).*//p}'
注意: 假定 ip 地址紧跟在 inet
字符串之后,然后是 space 或正斜杠
出于测试目的,我们假设 ip addr > ip.out
生成:
$ cat ip.out
some stuff on line 1
inet 10.10.14.252/23 scope global tun0
some stuff on line 3
正在模拟 ip addr
:
$ cat ip.out | sed -En '/inet .* tun0/{s/^inet ([^ /]*).*//p}'
10.10.14.252
将 jq
与 ip -json
一起使用:
$ ip -j -4 -o addr | jq -r '.[] | select(.addr_info[].dev=="tun0") | .addr_info[].local'
我建议:
ip -o -4 addr list tun0 | awk -F ' *|/' '{print }'