【发布时间】:2018-02-04 20:41:08
【问题描述】:
用grep从一个字符串中提取所有ip地址很简单。
string="221.11.165.237xxxx221.11.165.233\n
219.158.9.97ttttt219.158.19.137"
echo $string |grep -oP "(\d+\.){3}\d+"
221.11.165.237
221.11.165.233
219.158.9.97
219.158.19.137
正则表达式模式很简单(\d+\.){3}\d+。
用 sed 和 awk 做同样的工作。
对于 sed:
echo $string | sed 's/^\(\(\d\+\.\)\{3\}\d\+\)$/\1/g'
221.11.165.237xxxx221.11.165.233\n 219.158.9.97ttttt219.158.19.137
对于 awk:
echo $string |gawk 'match($0,/(\d+\.){3}\d+/,k){print k}'
echo $string |awk '/(\d+\.){3}\d+/{print}'
如何解决 sed 和 gawk(awk) 的问题?
期望输出与 grep 相同。
221.11.165.237
221.11.165.233
219.158.9.97
219.158.19.137
【问题讨论】: