Bash 脚本正则表达式匹配 1 或 2 个数字

Bash script regex match 1 or 2 digits

我正在编写一个 Bash 脚本来从文件名中提取部件号。文件名命名为:part-number-N.jpg 或 part-number-NN.jpg 其中 "N" 是一个数字。

在此脚本中,“$files”只是一个目录中的文件列表。

for f in $files; do 
  fileName=$(basename $f)
  tmp=${fileName%.jpg}
  partNo=${tmp%-[0-9]}
done

我如何更新此脚本以删除字符串末尾最多后跟两位数字的连字符?

你可以使用 extended globs

shopt -s extglob
partNo="${tmp%-[[:digit:]]?([[:digit:]])}"

此外,您最好将文件存储在数组中 (files=(file1 file2 "file with embedded spaces in name"..)) 并像这样遍历数组 - for file in "${files[@]}"。还自由地双引号变量

晚回答

您还可以在循环中使用 sed 来操作文件名:

for f in $files/*; do
    newFile=$(basename $f | sed 's/-[0-9][0-9]*//')
    echo $newFile
done

输出

part-number-N.jpg  ->  part-number.jpg
part-number-NN.jpg ->  part-number.jpg