我正在尝试使用正则表达式编写bashscript检查以区分以下文件。我试图在if语句中选择DRLIC_INFO_20170912.out而不是DRLIC_INFO_20170912_TEMP.out。 20170912将是每日时间戳。
输入文件名:
DRLIC_INFO_2017-09-12.out
DRLIC_INFO_2017-09-12_TEMP.out
当前检查:
SEARCH_DRLIC_INFO='DRLIC_INFO'
if [[ $filename == *$SEARCH_DRLIC_INFO* ]]
答案 0 :(得分:0)
请您试着跟随并告诉我这是否对您有帮助。
filename1="DRLIC_INFO_20170912_TEMP.out"
regex="DRLIC_INFO_[[:digit:]]+_TEMP.out"
if [[ $filename1 =~ $regex ]]; then echo "File named "$filename1 " found."; else echo "File name " $filename1 " not found."; fi
或者,如果您想要具体说明字符串应该包含8位数字的日期,您可以将上面的正则表达式变量更改为以下数据。
regex="DRLIC_INFO_[[:digit:]]{8}_TEMP.out
编辑:如果你想使用SEARCH_DRLIC_INFO变量,你可以尝试一下,然后让我知道。
SEARCH_DRLIC_INFO="DRLIC_INFO"
filename1=$SEARCH_DRLIC_INFO"_20170912_TEMP.out"
regex="DRLIC_INFO_[[:digit:]]{8}_TEMP.out"
if [[ $filename1 =~ $regex ]]; then echo "File named "$filename1 " found."; else echo "File name " $filename1 " not found."; fi
答案 1 :(得分:0)
我根本不认为你需要一个正则表达式。如果您知道文件的确切格式,那么您可以创建一个匹配它的glob模式。通过在末尾指定部件,可以阻止包含_TEMP
的文件匹配:
timestamp=20170912
for file in DRLIC_INFO_"$timestamp".out; do
echo "$file" # for debugging
# :
done
循环仅演示您想要匹配的文件 - 如果需要,可以用:
替换正文(不执行任何操作,返回成功)。循环结束后,$file
包含您的文件名。
或者,您可以使用数组:
files=( DRLIC_INFO_"$timestamp".out )
echo "${files[0]}"
在这种情况下,第0个元素是您的文件。