${a[@]}
次のファイルを含むbash配列があります。
List.150.dmg
List.151.dmg
List.152.dmg
....
数字の間の数字だけを抽出したいと思います。 GNU grepでこれを行うことはできますか?
答え1
GNUがあり、basename
すべての名前が次に終わるとします.dmg
。
$ basename -s .dmg "${a[@]#*.}"
150
151
152
各名前に展開して、"${a[@]#*.}"
最初のドット文字(最初のドット文字を含む)を削除します。basename
オプションが指定された一連のファイル名からサフィックスを削除するGNUユーティリティ-s
。
結果は新しい配列で読み取ることができますn
。
readarray -t n < <(basename -s .dmg "${a[@]#*.}")
this を使用しているので、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