2012-08-24 132 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}