匹配grep中的数字序列

Yon*_*sma 4 linux grep regex syntax

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

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

<span class='t-d'>1994-Oct-28</span>
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,当我有这个时,我只想抓住它 1994 年的部分,并用它来继续存档到正确的年份。我假设这样的事情就足够了:

grep -o '[0-9]{4}'
Run Code Online (Sandbox Code Playgroud)

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

grep -o '[0-9]'
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*teo 5

{4}是一个延长的正则表达式grep除非您指定-E选项,否则不会理解它:

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

尝试

grep -E '[0-9]{4}'
Run Code Online (Sandbox Code Playgroud)

例子

$ echo abcd1234abcd | grep -o -E '[0-9]{4}'
1234
Run Code Online (Sandbox Code Playgroud)

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

$ echo abcd1234abcd | grep -o -E '[[:digit]]{4}'
1234
Run Code Online (Sandbox Code Playgroud)

如果出于任何原因您不想使用扩展的正则表达式,您可以使用

grep -o '[0-9][0-9][0-9][0-9]'
Run Code Online (Sandbox Code Playgroud)