sed/echo 조합을 사용하여 배열 채우기

sed/echo 조합을 사용하여 배열 채우기

날짜가 포함된 여러 파일의 이름을 바꾸려고 합니다. 날짜를 연도, 월, 일로 분할한 다음 디렉토리 트리에 year/month-year/filename_yearmonthday.extension과 같은 새 파일 이름을 만들고 싶습니다.

날짜를 필터링하고 이를 세 개의 개별 변수에 다시 쓰는 sed 표현식을 성공적으로 만들었습니다. 이제 [0]이 연도, [1]이 월, [2]가 일인 배열에 값을 삽입하고 싶습니다. 나는 다음 진술을 시도했습니다.

#!/bin/bash
for i in *
do 
myarray=( $(echo ${i} |  \
  sed -n 's/.*\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*/\1 \2 \3/p' ) )
done

그러나 스크립트는 구문 오류에 대해 불평합니다. sed 표현식이 포함된 세 번째 줄에 예기치 않은 "("가 있습니다("완료"가 예상됨).

***수정일자 위치가 계속 바뀌어서 문자열로만 나눌 수가 없네요.

지금까지 나는 이런 일을 해본 적이 없습니다.

#!/bin/bash
myarray=(1 2 3 4)
echo ${myarray[@]}

배열이 포함된 행에서 항상 "구문 오류: "("예기치 않은 (예상 '완료')')라고 표시됩니다. ***END

명령줄에서 직접 이 작업을 수행하면 작동합니다. 도와주셔서 감사합니다.

답변1

저라면 다음과 같이 배열을 로드하겠습니다.

#!/bin/bash

string="file_20160825_namegoeson"

myarray[0]="${string:5:4}"
myarray[1]="${string:9:2}"
myarray[2]="${string:11:2}"

echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"

관련 정보