【发布时间】:2014-10-17 17:55:48
【问题描述】:
我需要将文件名与模式“myTestData_[YYYYMMDD][HHMMSS][NNN].csv.gz”匹配。样本匹配文件名为“myTestData_20140821_052354_001.csv.gz”
这里 myTestData_ 和 .csv.gz 是常量,YYYYMMDD 和 HHMMSS 来自时间戳。 NNN 是任意 3 位数字。能否请您告知我在 Unix 脚本中的正则表达式模式应该是什么。
这是我正在尝试的代码:
infile='fileNameSamples.csv'
while read line ; do
if [[ $line =~ ^myTestData_\d{8}_\d{6}_\d{3}.csv.gz$ ]] ; then
echo 'matched:'$line
else
echo 'failed'
fi
done < "$infile"
这是 fileNameSamples.csv 中的文件名:
myTestData_20140821_001.csv.gz
TestData_20140821_001.csv.gz
myTestData_20140821_001.csv.g
myTestData_20140821_002.csv.gz
当我执行它时,如果我替换它,它会为所有文件返回 false
if [[ $line =~ ^myTestData_\d{8}_\d{6}_\d{3}.csv.gz$ ]] ; then
有
if [[ $line =~ ^(.*)([0-9]{8})(.*)$ ]] ; then
它返回所有文件,意味着我在正则表达式中使用常量字符串时遇到问题,请指出我在做什么错误。
非常感谢! 阿米特
【问题讨论】:
-
匹配它然后用它做什么?提供一些背景信息会很有帮助,理想情况下,向我们展示您已经尝试过的内容。