我正在尝试从路由表中选择一个 IP 地址,但在制作 sed 或 grep 表达式方面运气不佳。
我有以下有效的正则表达式,并按照正则表达式测试人员的预期选择组 1。
.*0\.0\.0\.0\/0.*(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b).*eth0.*
我已经能够通过 awk 轻松获得所需的输出,但是当脚本在我的环境中执行时,bash 变量为空。我已经尝试过 sed 和 awk 的各种表达式,但似乎需要的选择器比我熟悉的要多
/usr/bin/vtysh -c 'show ip route' |
sed -n 's/.*\(\b\d\{1,3\}\.\d\{1,3\}\.\d\{1,3\}\.\d{1,3}\b\).*eth0.*/\1/p'
输入如下
Codes: K - kernel route, C - connected, S - static, R - RIP,
O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
F - PBR, f - OpenFabric,
> - selected route, * - FIB route, q - queued route, r - rejected route
S>* 0.0.0.0/0 [210/0] via 9.16.24.1, eth0, 1d06h57m
S> 0.0.0.0/0 [300/0] via 9.16.26.1, eth1, 1d06h57m
O>* 10.0.0.0/19 [110/42] via 10.255.255.21, eth1, 1d06h56m
* via 10.255.255.22, eth1, 1d06h56m
预期输出:
9.16.24.1
答案1
grep
我认为这是(GNU) 或 的工作awk
,而不是sed
:
grep -Po "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=, eth0)" file
输出:
9.16.24.1