无法在 grep 中使用正则表达式排除 IPv4 地址

Unable to exclude IPv4 addresses using regex in grep

我使用正则表达式从文件内容中 grep 并仅输出 IPv4 地址。

但是当我尝试使用相同的正则表达式来排除所有 IPv4 地址时,它就是行不通。

文件内容:

# cat IPs
172.16.1.125
172.16.1.4
172.16.1.143
172.16.1.140
172.16.1.77
/dev/nvme101
/dev/sda1
/dev/sdb2
172.16.1.60
172.16.1.146
172.16.1.5
172.16.1.51
172.16.1.99
172.16.1.10
172.16.1.189

仅 grep IPv4 地址:

# grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" IPs
172.16.1.125
172.16.1.4
172.16.1.143
172.16.1.140
172.16.1.77
172.16.1.60
172.16.1.146
172.16.1.5
172.16.1.51
172.16.1.99
172.16.1.10
172.16.1.189

当我尝试使用相同的正则表达式排除 IPv4 地址时:

# grep -voE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" IPs
#

完全没有输出。

我期待以下输出:

/dev/nvme101
/dev/sda1
/dev/sdb2

去掉 -o-o 标志表示只显示匹配的内容而不是整行。当对不匹配的行使用 -v 时,这没有意义。

ack 中,如果您尝试同时使用 -o-v,则会引发错误。