【发布时间】:2014-12-12 13:28:39
【问题描述】:
我有以下unix 命令,我用它来尝试在文件中查找格式为yyyy-mm-dd 的日期:
grep -i -w [\d]{4}-[\d]{2}-[\d]{2}? <filename>
但由于某种原因,我得到了一个空洞的答案。我是否正确匹配 grep 的正则表达式?
【问题讨论】:
我有以下unix 命令,我用它来尝试在文件中查找格式为yyyy-mm-dd 的日期:
grep -i -w [\d]{4}-[\d]{2}-[\d]{2}? <filename>
但由于某种原因,我得到了一个空洞的答案。我是否正确匹配 grep 的正则表达式?
【问题讨论】:
使用 bash 扩展正则表达式(-E,--extended-regexp),以下工作正常:
grep -E -i -w "[0-9]{4}-[0-9]{2}-[0-9]{2}" <filename>
但是,在这种情况下,您应该使用[0-9] 而不是\d。
如果要使用\d,需要指定PERL正则表达式(-P,--perl-regexp):
grep -P -i -w "\d{4}-\d{2}-\d{2}" <filename>
【讨论】:
你可以试试下面的 grep 命令,
grep -oP '\d{4}-\d{2}-\d{2}' file
或
$ grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' file
或
grep -o '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' file
【讨论】: