使用正则表达式在UNIX中搜索特定模式

时间:2014-02-07 06:43:24

标签: regex bash unix find

我有类似的文件名 我目录中的ABCD20140207090842 ABCD20140207090847 ABCD20140207090849 ABCD20140207090850 ABCD2014556644219268 ABCD20140508525691 tf

我想搜索具有特定模式的文件。即 FileNameYearMonthDayHourMinSec.txt

注意:文件tfABCD2014556644219268不应匹配。

回答确切的模式将不胜感激。

2 个答案:

答案 0 :(得分:0)

基于NAME,然后是DATE.txt,我得到了这个:

find . -regex ".*[19|20][0-9][0-9][0-1][0-2][0-3][0-9][0-2][0-9][0-6][0-9][0-6][0-9]\.txt$"

但这并不能解释闰年,并且可以与2月31日等日期相匹配。

答案 1 :(得分:0)

改变主意。无论闰年与否,这都是剧本。

使用GNU日期来识别日期

for file in *.txt
do
  time=${file%.*}         # remove suffix and get ABCD20140207090842 
  time=${time:(-14)}      # get the date/time 20140207090842
  time="${time:0:4}/${time:4:2}/${time:6:2} ${time:8:2}:${time:10:2}:${time:12}"      # convert time to: 2014/02/07 09:08:42
  date -d "$time" >/dev/null 2>&1 && echo $file
done

ABCD20140207090842.txt
ABCD20140207090847.txt
ABCD20140207090849.txt
ABCD20140207090850.txt