使用 grep 正则表达式匹配任意数量的数字

hdu*_*dub 10 regex grep

我有一个文件,其中的行看起来类似如下

data
datalater
983290842
Data387428later
datafhj893724897290384later
4329804928later
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用正则表达式来匹配以数据开头并以稍后结尾且中间有数字的任何行。这是我到目前为止所炮制的内容:

^[D,d]ata[0-9]*later$ 
Run Code Online (Sandbox Code Playgroud)

但是输出包括所有 datalater 行。我想我可以稍后通过管道输出和 grep -v data,但我觉得单个表达式应该可以解决问题。

Tom*_*ann 13

使用+而不是*.

+至少匹配前面的一项或多项。
*匹配零个或多个。

^[Dd]ata[0-9]+later$
Run Code Online (Sandbox Code Playgroud)

在 grep 中,您需要转义+, 我们可以使用\d它是一个字符类并匹配单个数字。

^[Dd]ata\d\+later$
Run Code Online (Sandbox Code Playgroud)

在您的示例文件中还有一行:

datafhj893724897290384later
Run Code Online (Sandbox Code Playgroud)

由于数据和数字之间存在字母,目前不会匹配。我们可以通过添加 a[^0-9]*来匹配数据后面直到数字的任何内容来解决此问题。

我们的最终命令是:

grep '^[Dd]ata[^0-9]*\d\+later$' filename
Run Code Online (Sandbox Code Playgroud)