在 bash 中,我想解析 mp3 文件的文件名,其中轨道号、艺术家和标题之间的分隔符是“-”(空格破折号空格)。预期结果如下:
轨道标题(原版 - 长编)
我的sed命令如下:
echo "03 - 艺术家姓名第一中间名 - 轨道标题(原始版本 - 长编辑)"| sed -E 's/^([^ - ]*[ - ]){2}//'
结果:艺术家名-中间名-轨道标题(原始版本-长编辑)
我被困在这里,无法将“- ”作为一个术语。我究竟做错了什么?感谢您的提示!
这里的示例数据:
'01 - Skyway - Chillwave - Synthwave - Retrowave Mix.mp3'
'02 - Baldocaster - Astral Dive.mp3'
'05 - Jacket. and Shadowrunner - Deathtouch.mp3'
'06 - Night Drive - A Synthwave Mix.mp3'
'07 - Shadowrunner and Syst3m-Glitch - Eastbound Plane Mattaei (Original - Long Mix).mp3'
在bash脚本中我要设置title变量如下:
title=`echo ${filename} | sed -E "s/^([^${SEPARATOR}]*[${SEPARATOR}]){4}//"
其中 SEPARATOR 是一个变量,也包含例如“——”
最佳答案
使用参数扩展的解决方案。
$ filename="03 - Artist name first-middle name - Title of the Track (Original Version - Long Edit)"
$ filename="${filename#* - * - }"
$ echo "$filename"
Title of the Track (Original Version - Long Edit)
关于regex - sed 带有以空格开头并包含破折号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73816830/