我正在尝试从字符串中打印任何日期值。例如:
echo "08/08/2018 text here" | grep '/(0\d{1}|1[0-2])\/([0-2]\d{1}|3[0-1])\/(19|20)\d{2}/'
这不会返回结果。我只想打印日期值,不包括此处的文本。
答案 0 :(得分:1)
grep
不在正则表达式周围使用/
分隔符,并且不需要您转义嵌入式/
。
您需要使用-P
选项来对GNU grep
使用PCRE正则表达式,以便它将\d
识别为数字。
您应将\b
放在正则表达式周围,以匹配单词边界。否则,如果输入内容包含108/08/2018
,则它将匹配1
之后的日期。
您需要-o
选项仅打印匹配行的一部分,而不打印整个匹配行。
echo "08/08/2018 text here" | grep -Po '\b(0\d{1}|1[0-2])/([0-2]\d{1}|3[0-1])\/(19|20)\d{2}\b'