尝试这样做(只有一个管道):
route -n | awk -viface=eth0 '{if ($1 == "0.0.0.0" && $8 == iface) {print $2;exit}}'
甚至更好:
ip route | awk -viface=eth0 '{ if ($1 == "default" && $2 == "via" && $5 == iface) {print $3; exit} }'
为什么不用 awk ,而不是怪诞的正则表达式?就像是:
awk
route -n | grep -e 'UG.*tun0' | awk '{print $2}'
免责声明:我没有测试过这个,所以可能会有拼写错误...
另一种选择,没有正则表达式和awk:
route -n | grep -E "ppp0$" | tr -s ' ' | cut -f 2 -d ' '