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

Son*_*ire 1 regex unix grep

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

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Run Code Online (Sandbox Code Playgroud)

而我想要的只是使用grep -E'[1-2] [??]来获取13到20之间的数字是否可能?

请不要给出关于awk的答案我不是在问它非常感谢你

Boh*_*ian 5

这应该这样做:

^(1[1-9]|2[0-6])$
Run Code Online (Sandbox Code Playgroud)


Exp*_*lls 5

|表示正则表达式中的交替。您可以将其视为合乎逻辑的or. 因此:

1[3-9]|20
Run Code Online (Sandbox Code Playgroud)

方法

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 到 92 后跟 0 到 6

正如波西米亚人所表明的那样。的^$零个宽度断言锚均值和“字符串的结束”分别“字符串的开始”。它们的确切含义可能因正则表达式风格而异,但在egrep和其他基于行的正则表达式风格中,这就是它们的意思。如果行中有其他字符的可能性,您会想要使用这些

a13b
&20-
Run Code Online (Sandbox Code Playgroud)

如果您知道该数字将是该特定行上的全部内容,则它们并不是绝对必要的。