Bash配列から文字列間の数値を抽出する

Bash配列から文字列間の数値を抽出する

${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

関連情報