0

$ ip route 得到 255.255.255.255

广播 255.255.255.255 dev eth0 src 192.168.223.129

我想得到192.168.223.129所有我知道的IP地址是我必须使用sed命令。另外,你能描述一下使用的命令吗?

4

5 回答 5

3

如果我要提取文本,首先出现的是 grep/ack。

试试这个:

ip route get 255.255.255.255|grep -oP '(?<=src ).*'
于 2013-01-05T16:38:57.497 回答
3

这是一个模式匹配问题,它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您需要使用-Pperl 正则表达式的标志,并且该-o标志告诉grep只显示该行的匹配部分,因为默认行为grep是显示包含匹配项的整行。

此解决方案独立于ip route get 255.255.255.255您正在搜索的输出和单词后面的 IP 地址src,而不依赖于输出的格式,例如它恰好是第一行的最后一个单词。

于 2013-01-05T17:09:34.353 回答
2

改用 AWK

使用 AWK 更容易解决此问题。假设这不是家庭作业,请使用正确的工具来完成这项工作!例如,要将 IP 地址存储在变量中以供以后使用,您可以执行以下操作:

ip_address=$(
    ip route get 255.255.255.255 |
    awk '{print $NF; exit}'
)

然后,您可以通过新变量访问该值。例如:

$ echo "$ip_address"
192.168.1.1
于 2013-01-05T16:47:22.200 回答
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
于 2013-01-05T16:17:34.100 回答
1

使用 sed 你可以这样做:

ip route get 255.255.255.255 | sed -n '/src/ s/.*src //p'

-n抑制输出。该/src/位选择在哪些行上执行替换s///和打印p命令。替换命令s/.*src //删除所有内容,包括src(注意尾随空格)。

于 2013-01-05T16:21:47.610 回答