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