![grep 命令仅提取某些单词](https://linux22.com/image/70909/grep%20%E5%91%BD%E4%BB%A4%E4%BB%85%E6%8F%90%E5%8F%96%E6%9F%90%E4%BA%9B%E5%8D%95%E8%AF%8D.png)
我有一份很大的报告,其中有许多随机行显示的 IP 地址。所有 IP 地址均以 192.168 开头。我只想提取 IP 地址并获得如下所示的报告:
192. 任何事. 任何事. 任何事
192.xx.xx.xx
192.xx.xx.xx
没有别的。我尝试过cat filename | grep -w 192
,似乎得到了整条线。我只想要完整的 IP 地址。我感谢您可以与我分享的任何信息。
答案1
egrep -o
我用or来做这个grep -E -o
grep 中的 -E 标志激活正则表达式(这是 egrep 默认情况下所做的),并且 -o 标志打印仅有的匹配的字符串。
grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' /path/to/log
192.168.1.11
答案2
grep -o '192.168.[0-9.]*' datfile | sort -u
可能无法移植到旧版本的grep
,但-o
似乎在 GNU 和 *BSD 中都是如此grep
,所以...(它也不是 IP 地址的完美匹配,但使用正则表达式执行正确的数字范围非常烦人。)
答案3
sed -n 's/.*\(192.168.[^ ]*\).*/\1/p' filename
应该可以解决问题。 \>
表示单词结束。
答案4
由于所有 IP 地址都以192.168.
您可以执行的操作:
grep -o '192\.168\.[^ ]\+' file.txt
例如 :
$ grep -o '192\.168\.[^ ]\+' bar.txt
192.168.5.4
192.168.1.2