我有一个文件,里面有如下几行
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/