我有大約 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