![无法使用“grep -E”匹配特定数字](https://linux22.com/image/1128974/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E2%80%9Cgrep%20-E%E2%80%9D%E5%8C%B9%E9%85%8D%E7%89%B9%E5%AE%9A%E6%95%B0%E5%AD%97.png)
这里我尝试搜索 0 到 255 之间的数字,但匹配到的却是一些随机数字。例如:
1335.0。1。2三十四
或者
241.92.88.103
粗体表示匹配的数字。
我得到的这个数字有一个超过 255 的数字,但仍然匹配,因为它将 1 视为一个独立数字(?)。即使数字不超过 255,数字的随机部分也会匹配。
我使用的命令是:
grep -E '[0-255]' asd.txt
答案1
您误解了正则表达式:并不表示“和[0-255]
之间的小数”,而表示“ 、或”之一。0
255
0
1
2
5
这是正确的正则表达式:
\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.0。1。234 241。92。88。103
(除 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