如何仅使用grep将特定数字范围与正则表达式匹配

时间:2014-01-23 04:24:00

标签: regex unix grep

例如,我的时间范围如下:

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

而我想要的只是使用grep -E'[1-2] [??]来获取13到20之间的数字 有可能吗?

请不要给出关于awk的答案我不是在问它非常感谢你

3 个答案:

答案 0 :(得分:5)

这应该这样做:

^(1[1-9]|2[0-6])$

答案 1 :(得分:4)

|表示正则表达式中的替换。您可以将其视为逻辑or。因此:

1[3-9]|20

装置

  

1,然后是3,4,5,6,7,8或9, OR 2,然后是0

这将匹配指示的任何数字(13,14,15,16,17,18,19或20)。

以上可能是1[1-9]|2[0-6],即:

  

1,然后是1到9 OR 2,然后是0到6

波西米亚人指出。 ^$零宽度断言锚点分别表示“字符串的开头”和“字符串的结尾”。它们的确切含义可以根据正则表达式的风格而有所不同,但在egrep和其他基于行的正则表达式风格中它们的意思。如果

中的行中有其他字符的可能性,您可能希望使用这些
a13b
&20-

如果您知道该号码将是该特定线路上的所有号码,则不一定非必要。

答案 2 :(得分:0)

您需要将正则表达式括在双引号(“”)中。此外,考虑到更广泛的搜索域,如果数字超过2位,则需要在表达式中添加其他量词。假设您要搜索范围

中的数字
1865259000 to 1865361999

你的正则表达式应该是:

"1865259[0-9]{3}|18652[6-9][0-9]{4}|18653[0-6][0-1][0-9]{3}"

花括号内的数字表示该模式应与该次数完全匹配。所以,

 [0-9]{2}

表示在0到9之间出现2次数字。