提取 bash 数组字符串之间的数字

提取 bash 数组字符串之间的数字

我有一个 bash 数组${a[@]},其中包含以下文件:

List.150.dmg
List.151.dmg
List.152.dmg
....

我只想提取数字之间的数字。这可以在 GNU grep 中完成吗?

答案1

假设您有 GNUbasename并且所有名称都以 结尾.dmg

$ basename -s .dmg "${a[@]#*.}"
150
151
152

扩展"${a[@]#*.}"为每个名称,并删除第一个点字符(包括第一个点字符)。 GNUbasename实用程序可以从给定选项的一组文件名中删除后缀-s

结果可以读入一个新数组n,,

readarray -t n < <(basename -s .dmg "${a[@]#*.}")

由于我们使用的是basename,即使文件名指定了目录路径,这也可以工作:

$ a=(/some/path/List.{150..153}.dmg)
$ readarray -t n < <(basename -s .dmg "${a[@]#*.}")
$ printf '%s\n' "${n[@]}"
150
151
152
153

答案2

#! /bin/bash

a=(List.150.dmg List.151.dmg List.152.dmg)

for file in "${a[@]}"; do
    number="${file#*.}"
    number="${number%.*}"
    echo "$number"
done

答案3

使用cut

printf '%s\n' "${a[@]}" | cut -d. -f2

相关内容