데이터를 가져오려는 파일 이름이 약 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