2012-08-24 181 views
0

我有一個文本文件,我想在其中找到一些代碼,每個代碼由3位數字+7個大寫字母組成 示例:374ANSKJDS; 3UKRHDPO; 99RWLFOPE 我的問題如何通過數字範圍使用grep或sed查找這些代碼?例如 我想查找從750到900的代碼?正則表達式數字範圍

感謝

編輯

現在,我做到了用grep感謝所有,可有人給命令窗口下使用awk來做到這一點?

+0

我能做的最好的是,[7-9] [0-9] [0-9],這是錯誤的,因爲它會找到例如999我不想要它 – Leo92

回答

3

您無法使用正則表達式比較數字的值。但是,您可以通過指定多個模式來解決此問題。對於您指定的時間間隔(750-900),你可以使用下面的正則表達式:

(7[5-9][0-9]|8[0-9][0-9]|900)[A-Z]{7} 
+0

無論如何,這也會匹配超過7個大寫字母的文本(例如750ABCDEFGHI)。你有兩種選擇:用「[AZ] [AZ] [AZ] [AZ] [AZ] [AZ]替換」[AZ] +「或者瞭解分隔符(如果有的話)在你的例子中的尾部空間),並將其添加到組:「([7] [5-9] [0-9] [AZ] +)」 – tbl

+0

它的訣竅:)謝謝 – Leo92

+0

太棒了!並感謝@Tim的範圍規格。現在我再次記起來。 :) – tbl

1

您可以使用此類的正則表達式的

((7[5-9][0-9])|(8[0-9][0-9])|(900))[A-Z]{7} 
+0

哦..似乎我有一個副本) – udalmik

1

可以匹配所有的人使用:

\d{1,3}[A-Z]{7} 

由於您想匹配一個範圍,因此您需要用每個範圍的其他內容替換\d{1,3}部件。因爲正則表達式在字符串上工作,所以you can not write類似於[750-900]以匹配範圍。因此,對於範圍[750-900],使用此:

(7[5-9]\d|8\d\d|900)[A-Z]{7}