REGEX文件名Shellscript检查

时间:2017-09-12 16:16:42

标签: regex linux bash shell unix

我正在尝试使用正则表达式编写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* ]]

2 个答案:

答案 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个元素是您的文件。