$ ip route 得到 255.255.255.255
广播 255.255.255.255 dev eth0 src 192.168.223.129
我想得到192.168.223.129
所有我知道的IP地址是我必须使用sed
命令。另外,你能描述一下使用的命令吗?
$ ip route 得到 255.255.255.255
广播 255.255.255.255 dev eth0 src 192.168.223.129
我想得到192.168.223.129
所有我知道的IP地址是我必须使用sed
命令。另外,你能描述一下使用的命令吗?
如果我要提取文本,首先出现的是 grep/ack。
试试这个:
ip route get 255.255.255.255|grep -oP '(?<=src ).*'
这是一个模式匹配问题,它grep
是最简单且最适合执行此操作的工具。
您要匹配的是单词后面的 IP 地址src
。您可以使用此正则表达式来匹配 IP 地址:(\d{1,3}.){4}
并使用肯定的向后查找src
来确保 IP 地址遵循以下单词(?<=src )
:
$ ip route get 255.255.255.255 | grep -Po '(?<=src )(\d{1,3}.){4}'
192.168.223.129
要使用积极的前瞻,grep
您需要使用-P
perl 正则表达式的标志,并且该-o
标志告诉grep
只显示该行的匹配部分,因为默认行为grep
是显示包含匹配项的整行。
此解决方案独立于ip route get 255.255.255.255
您正在搜索的输出和单词后面的 IP 地址src
,而不依赖于输出的格式,例如它恰好是第一行的最后一个单词。
使用 AWK 更容易解决此问题。假设这不是家庭作业,请使用正确的工具来完成这项工作!例如,要将 IP 地址存储在变量中以供以后使用,您可以执行以下操作:
ip_address=$(
ip route get 255.255.255.255 |
awk '{print $NF; exit}'
)
然后,您可以通过新变量访问该值。例如:
$ echo "$ip_address"
192.168.1.1
如果你可以不用 out sed
,这里有一些可行的方法:输出ip route
[aman@aman ~]$ ip route get 255.255.255.255
broadcast 255.255.255.255 dev wlan0 src 192.168.1.4
cache <local,brd>
获取ip
地址
[aman@aman ~]$ ip route get 255.255.255.255|head -1|cut -f7 -d' '
192.168.1.4
使用 sed 你可以这样做:
ip route get 255.255.255.255 | sed -n '/src/ s/.*src //p'
-n
抑制输出。该/src/
位选择在哪些行上执行替换s///
和打印p
命令。替换命令s/.*src //
删除所有内容,包括src
(注意尾随空格)。