无法使用“grep -E”匹配特定数字

无法使用“grep -E”匹配特定数字

这里我尝试搜索 0 到 255 之间的数字,但匹配到的却是一些随机数字。例如:

1335.012三十四

或者

241.92.88.103

粗体表示匹配的数字。

我得到的这个数字有一个超过 255 的数字,但仍然匹配,因为它将 1 视为一个独立数字(?)。即使数字不超过 255,数字的随机部分也会匹配。

我使用的命令是:

grep -E '[0-255]' asd.txt

答案1

您误解了正则表达式:并不表示“和[0-255]之间的小数”,而表示“ 、或”之一。02550125

这是正确的正则表达式:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b

如果你尝试的话,你应该会得到以下输出:

$ grep -E '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\b' asd.txt
1335.01234
2419288103

(除 1335 外所有号码均已匹配。)


额外提示:如果您只想要匹配的数字(不包含点和不匹配的数字),请使用-o

$ grep -Eo '\b(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\b' asd.txt
0
1
234
241
92
88
103

另一个提示:如果要匹配有效的 IPv4 地址(每行一个),请使用以下命令:

grep -E '^((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])$' asd.txt

相关内容