regex - 使用grep regex匹配任意数量的数字

标签 regex grep

我有一个文件,里面有如下几行

data
datalater
983290842
Data387428later
datafhj893724897290384later
4329804928later

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

^[D,d]ata[0-9]*later$ 

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

最佳答案

使用 + 而不是 *
+ 至少匹配前面的一个或多个。* 匹配零个或多个。

^[Dd]ata[0-9]+later$

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

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

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

我们的最终命令将是:
grep '^[Dd]ata[^0-9]*\d\+later$' filename

关于regex - 使用grep regex匹配任意数量的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926332/

相关文章:

java - java中的正则表达式 : error for str. 替换 ("\s+", "")

正则表达式匹配优先级(前视和后视正则表达式)

javascript - 在javascript中将字符串变量转换为正则表达式?

regex - 从字符类中排除字符

Perl 中的正则表达式不匹配

bash - 使用 grep -f 查找匹配的模式本身

linux - 使用 awk 提取文本

linux - 如何通过将 Grep 输出管道传输到 Sed 来添加变量模式?

linux - 保存到变量时如何格式化 grep 输出

regex - 我的正则表达式有什么问题?