繁体   English   中英

如何仅使用grep将特定数字范围与正则表达式匹配

[英]How to match a specific number range with a regex using grep only

例如,我的时间范围如下:

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

我想要的是仅使用grep -E'[1-2] [??]'从13到20可以获得数字吗?

请不要回答有关awk的问题,我不是在问这个问题,非常感谢

应该这样做:

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

| 表示正则表达式的交替。 您可以将其视为逻辑or 从而:

1[3-9]|20

手段

1后跟3、4、5、6、7、8或9, 2后跟0

这将与指示的任何数字(13、14、15、16、17、18、19或20)匹配。

上面可能是1[1-9]|2[0-6] ,它是:

1后跟1到9 2跟0到6

就像波希米亚人所说的那样 ^$零个宽度断言锚分别表示“字符串的开始”和“字符串的结束”。 它们的确切含义可能会根据正则表达式的味道而有所不同,但是在egrep和其他基于行的正则表达式味道中,这就是它们的意思。 如果行中有其他字符的可能性,您将希望使用这些字符

a13b
&20-

如果您知道该数字将是该特定行上的全部数字,那么就不必严格要求它们了。

您需要将正则表达式括在双引号(“”)中。 此外,考虑到更广泛的搜索范围,如果数字大于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之间的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM