$ ip route get 255.255.255.255
广播255.255.255.255 dev eth0 src 192.168.223.129
我希望得到192.168.223.129
的IP地址我所知道的是我必须使用sed
命令。另外,您能描述一下使用的命令吗?
答案 0 :(得分:3)
如果我要提取文本,首先出现的是grep / ack。
试试这个:
ip route get 255.255.255.255|grep -oP '(?<=src ).*'
答案 1 :(得分:3)
这是一种模式匹配问题,grep
是最简单的,也是最适合这样做的工具。
您要匹配的是src
后面的IP地址。您可以使用此正则表达式匹配IP地址:(\d{1,3}.){4}
并使用positive lookbehind确保IP地址位于src
之后的单词(?<=src )
:
$ ip route get 255.255.255.255 | grep -Po '(?<=src )(\d{1,3}.){4}'
192.168.223.129
要对grep
使用正向前瞻,您需要为perl正则表达式使用-P
标志,而-o
标志告诉grep
仅显示匹配的部分line作为grep
的默认行为是显示包含匹配项的整行。
此解决方案独立于ip route get 255.255.255.255
的输出,因为您正在搜索单词src
后面的IP地址,而不依赖于输出的格式,例如它发生的最后一个字在第一行。
答案 2 :(得分:2)
使用AWK可以更轻松地解决此问题。假设它不是家庭作业,请使用正确的工具!例如,要将IP地址存储在变量中以供以后使用,您可以执行以下操作:
ip_address=$(
ip route get 255.255.255.255 |
awk '{print $NF; exit}'
)
然后,您可以通过新变量访问该值。例如:
$ echo "$ip_address"
192.168.1.1
答案 3 :(得分:1)
如果您可以使用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
答案 4 :(得分:1)
使用sed你可以这样做:
ip route get 255.255.255.255 | sed -n '/src/ s/.*src //p'
-n
抑制输出。 /src/
位选择执行替换s///
和打印p
命令的行。替换命令s/.*src //
删除所有内容,包括src
(注意尾随空格)。