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

관련 정보