지정된 구분 기호로 파일 이름을 분할하는 방법

지정된 구분 기호로 파일 이름을 분할하는 방법

데이터를 가져오려는 파일 이름이 약 200개 있습니다. 형식은 다음과 같습니다: filename(120516.1108).mp3 "(" 앞 부분과 "." 앞 부분을 가져오려고 합니다. 모든 파일이 이 형식을 갖고 있는 것은 아니므로 추가 파일이 있습니다. 도전.

출력은 "filename" "120516"이어야 합니다.

가능하다면 bash에서 이 작업을 수행하고 싶습니다. 나는 아직 배우는 중이고 bash에 대한 경험이 거의 없습니다. 코드와 함께 설명을 환영합니다.

답변1

"in bash"는 다음과 같습니다:

re='^(.*)\(([0-9]+)\.[0-9]+\).*$'

그 다음에

for f in *.mp3; do 
  [[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done

답변2

내가 올바르게 이해했다면 해당 명령이 작동해야 합니다(파일 이름에 '(' 및 '.'가 없는 경우)

data=$(echo $file | cut -d"." -f1 | tr -d "(")

이를 2개의 변수로 나눕니다.

filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)

답변3

사용매개변수 확장잘림.

case "$filename" in
  *\(*.*\)*)
    before_first_parenthesis=${filename%%\(*}
    after_first_parenthesis=${filename#*\(}
    before_dot=${after_first_parenthesis%%.*}
    echo "$before_first_parenthesis" "$before_dot"
  *) echo "does not match the format";;
esac

관련 정보