需求:
1、有一些列文件,是GNSS的观测数据文件,文件名的规则是:
4位字符,然后是001~365的数值,然后是0,最后是.22o
例如:bjfs0800.22o、bjfs1790.22o
测试文件生成代码:python
# -*- coding: utf-8 -*-
# python 2.7
"""
功能:生成测试文件:GNSS的观测数据文件,用于测试find命令的正则表达式。
bjfs0010.22o
……
bjfs3650.220
"""
import os
rootDir = r"/home/zhaozhonghai/temp"
#核心是生成001~365
for num in range(1, 367):
num_doy = str(num).zfill(3)
fileName="bjfs"+num_doy+"0.22o"
newFile = rootDir + "//"+fileName
print(newFile)
fo = open(newFile, "w")
if fo:
fo.write("我是测试内容")
fo.close()
下面这个命令会找到所有的文件:
find /home/zhaozhonghai/temp -regex ".*"
但是,如果仅需要匹配找到bjfs0800.22o到bjfs1290.22o之间的所有文件,日期是080~129之间的文件,如何匹配?仅能用1条命令。
如果采用
find /home/zhaozhonghai/temp -name "bjfs[0-1][01289][0-9]0.22o"
会匹配找到bjfs0070.22o,也就是采用name的方式,不能区分080和019。
如何采用正则表达式实现匹配查找需求??
find /home/zhaozhonghai/temp -regex ".*0[89][0-9]0.22o"
find /home/zhaozhonghai/temp -regex ".*1[0-2][0-9]0.22o"
也就是需要把上面2个正则表达式合并,
find /home/zhaozhonghai/temp -regex ".*(1[0-2][0-9]|0[89][0-9])0.22o"
上面这个匹配查找,没有找到任何,错误在哪里?