2014-01-23 29 views
0

例如,我有以下时间范围来匹配正则表达式的具体数量范围:如何用grep只

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

而且我要的是13到20得出的数字只用grep -E '[1-2] [??]' 是否有可能?

请不要给AWK左右回答我不要求它非常感谢你

+1

如何'egrep的“1 [3-9] | 20''? –

+0

@Explosion Pills很好解决它,但你可以请解释| |?感谢的人 – Soncire

回答

5

这应做到:

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

|意味着正则表达式中交替。你可以把它看作逻辑or。因此:

1[3-9]|20 

意味着随后3,4,5,6,7,8,或9,OR 2后跟0

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

上面可以1[1-9]|2[0-6]具体做法是:

1,接着1到9 OR 2接着0到6

如波希米亚指示。 ^$零宽度断言锚点分别表示“字符串的开始”和“字符串的结束”。它们的确切含义可以根据正则表达式的不同而有所不同,但在egrep和其他基于行的正则表达式中,它们的含义是相同的。您可能需要使用这些如果在

a13b 
&20- 

在行其他字符的可能性。如果你知道,这一数目将是所有这些都是在那个特定的路线,他们是不是绝对必要的。

+0

无论如何都应该使用锚点,因为数字显然可以有2位以上的数字,尽管这是他显示的所有输入,但OP并没有说他的数字都是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} 

装置2所发生的0位数之间至9