使用 grep 匹配冒号和斜线中的 IP 地址的正则表达式

Regex to match an IP adress within a colon and a slash with grep

我要搜索的文件中的行如下所示:

log:192.1.1.128/50098
log:192.1.1.11/22
...

现在我尝试了以下 RegEx,但其中 none 有效:

grep -oE "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" file
grep -oE "\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b"
grep -oE "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

你可以在没有正则表达式的情况下使用 awk 来做到这一点(在这个简单的例子中):

awk -F":|/" '{print }' file
192.1.1.128
192.1.1.11

测试其IP是否包含三个.:

awk -F":|/" '{n=split(,a,".");if (n=4) print }' file
192.1.1.128
192.1.1.11

你也可以使用 grep。

$ grep -oP '.*?:\K[^/]*(?=/)' file
192.1.1.128
192.1.1.11

Grep 的扩展正则表达式参数 -E 不支持 \d,您需要使用 [0-9] 而不是 \d

$ grep -oE "\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b" file
192.1.1.128
192.1.1.11