2014-01-23 31 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