grep 命令仅提取某些单词

grep 命令仅提取某些单词

我有一份很大的报告,其中有许多随机行显示的 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

相关内容