所以我尝试使用 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]'