regex - sed 带有以空格开头并包含破折号的正则表达式

标签 regex sed

在 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/

相关文章:

javascript - 正则表达式通过javascript从字符串中删除重复的字符

python - 如何使用正则表达式获取嵌套组

python - 从 Linux 命令或 Python 脚本中提取产品模型

regex - 使用sed在匹配后替换一定数量的字符

Linux脚本更改文件名、文件夹名和成分

bash - 命令输出 > sed 在特定字符串后替换

java - 我怎样才能找到replace_all的正则表达式?

regex - 如何删除SAS中两个字符串之间的所有字符(0个或多个)

regex - sed 替换为部分字符串

bash - Shell如何检查文件中的一行中是否存在模式