使用 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
我要搜索的文件中的行如下所示:
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