데이터를 추출하려는 파일 이름이 약 200개 있습니다. 형식은 다음과 같습니다. filename(120516.1108).mp3 "(" 앞 부분과 "." 앞 부분을 꺼내려고 합니다. 모든 파일이 이 형식을 갖는 것은 아니므로 추가 문제가 있습니다.
출력은 "filename" "120516"이어야 합니다.
가능하다면 bash에서 이 작업을 수행하고 싶습니다. 저는 아직 배우는 중이고 bash에 대한 경험이 거의 없습니다. 모든 설명과 코드를 환영합니다.
답변1
"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