如何在指定分隔符號處分割檔案名

如何在指定分隔符號處分割檔案名

我有大約 200 個檔案名,我正在嘗試從中提取資料。格式類似於: filename(120516.1108).mp3 我試圖拉出“(”之前的部分以及“.”之前的部分。並非所有文件都具有這種格式,因此還有一個額外的挑戰。

輸出應該是:“檔案名稱”“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

相關內容