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
我正在编写一个 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