2015-04-06 82 views
0

我试图从下面的列表中匹配特定的数字模式。 我的要求是只匹配report.20150325report.20150331。请帮忙。用于匹配数字模式的正则表达式

report.20150319 
report.20150320 
report.20150321 
report.20150322 
report.20150323 
report.20150324 
report.20150325 
report.20150326 
report.20150327 
report.20150328 
report.20150329 
report.20150330 
report.20150331 

回答

1

这很简单,以匹配25至31使用正则表达式2[5-9]|3[01]

下面是完整的正则表达式

(report\.201503(2[5-9]|3[01])) 

DEMO

说明的2[5-9]|3[01]

2 followed by a single character in the range between 5 and 9 
OR 
3 followed by 0 or 1 
0

您可以使用类似如此的东西:^report\.201503(2[5-9]|3[01])$/gm(使用this工具构建)。

它应该与您以后的报告相匹配,如here所示。

0

好像你想要打印符合两个独立图案的线条(包括与图案相匹配的线条)之间的线条。

$ sed -n '/^report\.20150325$/,/^report\.20150331$/p' file 
report.20150325 
report.20150326 
report.20150327 
report.20150328 
report.20150329 
report.20150330 
report.20150331 
+0

'的awk“/report.20150325/{f=1}/report.20150331/{print;f=0 } f'file' – 2015-04-06 07:38:25

+0

记住要固定您的RE并逃离您想从字面上理解的元字符。 – 2015-04-06 12:55:54

0

正则表达式匹配并不总是正确的方法。在这里,你问到匹配的字符串,然后一个号码,以便使用字符串和数字比较:

$ awk -F'.' '$1=="report" && ($2>=20150325) && ($2<=20150331)' file 
report.20150325 
report.20150326 
report.20150327 
report.20150328 
report.20150329 
report.20150330 
report.20150331