在bash中获取文件名末尾的数字

时间:2016-11-06 14:49:42

标签: bash numbers

所以,我制作一个脚本,我想在文件名末尾自动获取数字,而忽略文件名的其余部分。下面是一些文件名示例,以及在对它们运行指定命令时应返回的内容。

  1. 姓名:num71.gif结果:71
  2. 姓名:file1_num62.jpg结果:62
  3. 姓名:1_num3.png结果:3
  4. 姓名:24_1024.gif结果:1024
  5. 姓名:12806.png结果:12806

3 个答案:

答案 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