所以,我制作一个脚本,我想在文件名末尾自动获取数字,而忽略文件名的其余部分。下面是一些文件名示例,以及在对它们运行指定命令时应返回的内容。
num71.gif
结果:71
file1_num62.jpg
结果:62
1_num3.png
结果:3
24_1024.gif
结果:1024
12806.png
结果:12806
答案 0 :(得分:1)
最简单的解决方案(假设文件名在变量中)是使用正则表达式捕获它:
[[ ${f%%.*} =~ [[:digit:]]+$ ]] && num=$BASH_REMATCH
参数扩展从文件名中删除任何扩展名,因此我们只需要捕获由数字组成的最长后缀。 BASH_REMATCH
是一个数组,其第一个元素是与正则表达式匹配的字符串部分; $BASH_REMATCH
相当于${BASH_REMATCH[0]}
。
答案 1 :(得分:1)
不使用任何正则表达式,您可以使用此函数获取扩展前的最后一个数字:
fn() { declare local s="${1%%.*}"; echo "${s##*[!0-9]}"; }
将其命名为:
$> fn '24_1024.gif'
1024
$> fn '12806.png'
12806
$> fn 'num71.gif'
71
$> fn '1_num3.png'
3
$> fn 'file1_num62.jpg'
62
答案 2 :(得分:0)
如果您想要最后一个可能不在文件名末尾的号码,可以使用
grep -Eo "[[:digit:]]+" <<< "${file}"| tail -1