如何在复杂模式中 grep 日期值?

How can I grep date value in complex pattern?

我将这个 grep 用于日期:

grep -oP '(?<!\d)201\d{9}'

为此工作:

xxx_yyy/zzz/www201504091545-xxx.tar.gz

但是当行没有 201 时我不能 grep 日期值,像这样:

/data/xxxx/yyyy/zzzz/T111504091545.ZET.gz
/data/xxxx/yyyy/zzzz/Z251504081345.YAT.gz
/data/xxxx/yyyy/zzzz/ZT51504071235.YAT.gz
/data/xxxx/yyyy/zzzz/ZA51403021131.YAT.gz

1504.... 是日期值(或 1403、1404...)。在日期值之后有 .ZET.gz 或 .YAT.gz.

日期前有3个字符(数字and/or不是)。

我该怎么做?谢谢。

输出:

1504091545
1504081345
1504071235
1403021131

你可以使用这个grep:

grep -oP '\d{10}(?=\.)' file
1504091545
1504081345
1504071235
1403021131

或根据您的问题限制更多:

grep -oP '\d{10}(?=\.(YAT|ZET))' file