匹配的关键是正则表达式。工具可以考虑 grep 或者 sed。
方案1:
借助 grep:
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
方案2:
借助 sed:
ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'
注:sed 的 -E 选项依赖于具体的 sed 版本。如果 -E 无效,请使用 -r 替代。
另外,可以通过 ifconfig 指定要显示的的 interface。
ifconfig eth0 | ...
我在具体实践时,使用了方案2 并指定了 interface。
SERVER_IP=$(/sbin/ifconfig eth0 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p')
参见:SO