我有一个 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