我在文件夹中有很多文件:
<div class="col-md-2">
<input class="form-control" asp-for="AppointmentDate">
<span asp-validation-for="AppointmentDate" class="text-danger"></span>
</div>
以下文件名格式也是可能的(很少):
yyyymmdd_hhmmss.mp4
yyyymmdd_hhmmss_suffix1.mp4
yyyymmdd_hhmmss_suffix1_suffix2.mp4
其中$是数字0-9
我想抓住“yyyymmdd_hhmmss”并将其用作参数。 当我只提出一个后缀时,这就是我所做的:
yyyymmdd_hhmmss_$$$.mp4
yyyymmdd_hhmmss_$$$_suffix1.mp4
yyyymmdd_hhmmss_$$$_suffix1_suffix2.mp4
yyyymmdd_hhmmss_$$.mp4
yyyymmdd_hhmmss_$$_suffix1.mp4
yyyymmdd_hhmmss_$$_suffix1_suffix2.mp4
yyyymmdd_hhmmss_$.mp4
yyyymmdd_hhmmss_$_suffix1.mp4
yyyymmdd_hhmmss_$_suffix1_suffix2.mp4
但是当我提到上面提到的各种文件名格式时,我迷路了。 理想情况下,我想坚持目前的模式:
for file in "$@"; do
file_nosuffix="${file%*_suffix1.mp4}.mp4"
echo "$file and $file_nosuffix"
done
这可能吗?
答案 0 :(得分:4)
如果要确认格式,Bash具有内置的正则表达式支持:
regex='^[[:digit:]]{8}_[[:digit:]]{6}' # POSIX ERE; can't use PCRE extensions here
for file; do
if [[ $file =~ $regex ]]; then
echo "${BASH_REMATCH[0]} is the substring for $file" >&2
else
echo "$file does match the required format" >&2
fi
done
也可以简单地采用前缀;
for file; do
prefix=${file:0:15}
echo "Prefix for $file is $prefix"
done
...或者,删除最后两个下划线及其后的所有内容:
prefix=${file%_*_*}
请参阅: