如何在指定分隔符处分割文件名

如何在指定分隔符处分割文件名

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

相关内容