我正在尝试根据正则表达式搜索日志文件中的一行。当我使用下面的命令时,我得到了正确的输出。平台:Solaris,Shell:Bash
grep 14:[00-29]
O / P: 4月2日14:07:35 [192.168.162.117.113.169]
但是当我使用下面的命令时,我得到空白输出
grep 14:[00-29]:[00-59].
我错过了什么吗?
答案 0 :(得分:1)
你的正则表达没有按照你的想法行事。它实际上在做的是get me 14:[ONE number that is 0, 0-2 or 9]:[ONE number that is 0, 0-5, or 9]
。您应该将其更改为14:[0-9]|([0-2][0-9]):[0-9]|([0-5][0-9])
答案 1 :(得分:1)
[00-29]
仅匹配字符0,1,2和9。
[00-59]
仅匹配字符0,1,2,3,4,5和9。
[]
构造创建字符类,而不是数字范围。
您可能需要grep -E 14:[0-2][0-9]
。
答案 2 :(得分:1)
您需要使用其他正则表达式。例如,这就是:
grep "14:[0-2][0-9]:[0-5][0-9]" file
^^^ ^^^ ^^^ ^^^
| | | any number
| | from 0 to 5
from 0 to 2 any number
见输出:
$ grep "14:[0-2][0-9]:[0-5][0-9]" file
Apr 02 14:07:35 [192.168.162.117.113.169]
第一个匹配但随便:
$ grep 14:[00-29] file
Apr 02 14:07:35 [192.168.162.117.113.169]
^^
| |
| 7 is not matched
[00-29] matches this 0
答案 3 :(得分:0)
这两个正则表达式:
14:[00-29]
和
14:[00-29]:[00-59]
不正确,例如它们与0 to 29
的值不匹配。
对于00到59的范围,您可以使用:
\b(0[0-9]|[1-5][0-9])\b
范围为0到29:
\b(0[0-9]|[12][0-9])\b