在 grep 中匹配数字序列

在 grep 中匹配数字序列

所以我尝试使用 grep 匹配年份数字序列,这应该很容易。我只是有点困惑,我的简单正则表达式不起作用。

我正在运行一个工具来归档一些文件,但它需要检查文件的日期以将其放入正确的目录中。我已经有正确格式化的输入,如下所示:

<span class='t-d'>1994-Oct-28</span>

这只是一个例子,当我有这个时,我只想抓取其中的 1994 年部分并使用它来继续归档到正确的年份。我假设像这样的东西就足够了:

grep -o '[0-9]{4}'

但这似乎与任何东西都不匹配。当我尝试类似的事情时:

grep -o '[0-9]'

它匹配所有单独的数字,所以是 1 9 9 4 2 和 8。

所以我的语法是错误的,但据我所知,这匹配了 0 到 9 之间的数字 4 次,{} 指定了范围或精确范围内的长度。如果有人能帮助我理解这个简单的语法,我将不胜感激。

答案1

{4}是一个延长正则表达式.grep除非您指定以下选项,否则将无法理解它-E

-E, --extended-regexp
       Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

尝试

grep -E '[0-9]{4}'

例子

$ echo abcd1234abcd | grep -o -E '[0-9]{4}'
1234

您还可以使用[:digit:]字符类来避免符号顺序可能不同的语言环境出现的问题:

$ echo abcd1234abcd | grep -o -E '[[:digit]]{4}'
1234

如果出于某种原因你不想使用扩展正则表达式,你可以使用

grep -o '[0-9][0-9][0-9][0-9]'

相关内容