在bash中提取子字符串的更好方法

戴维·史密斯

我有一个mp3像这样命名文件列表

$artist/$album ($year)/$tracknum $title.mp3

这些轨道中的许多轨道都有不正确或丢失的标记,id3v2由于文件名都是正确的,因此我正在通过使用和regex进行更正。这是我如何设置标题的示例:

for mp3 in *.mp3; do id3v2 -t "$(echo $mp3 | cut -d. -f1 | cut -d\  -f2-)" "$mp3"; done

(注意:引号是存在的,因为标题经常有空格,除非使用空格,否则bash会抱怨)

我的问题是:是否有更好的方法从这些文件中提取特定的子字符串?就标题而言,我不能不grep -o进行匹配就使用$tracknum因为许多轨道的标题中都有数字和空格(这意味着我需要"([0-9a-zA-Z ]+)"我的模式,该模式与之前的整个文件名匹配.mp3)。

我几乎可以肯定,有更好的方法可以做到这一点。在那儿?

如果要提取标题(如果有用的话,请提取tracknum),则应该可以这样做:

read -r tracknum title <<<$(basename "$mp3" .mp3)

对于其他位,我将从分割文件名开始/以隔离各部分。例如:

album_year=$(cut -d/ -f2 <<<"$mp3")
album=${album%\ (*)}
year=${album_year:-5:4}

最后一个取决于实际年份和四位数。如果不能保证,则可以使用更笨拙的表达式来做到这一点:

year=${album_year:$((${#album}+2)):$((${#album_year}-${#album}-3}

另外,如果您不知道album_year零件的路径有多深,则可以使用以下命令提取倒数第​​二个分段(即文件的直接目录):

album_year=$(basename "$(dirname "$mp3")")

或者,您可以将整个路径拆分为一个数组:

IFS=/ read -ra segments <<<"$mp3"
album_year=${segments[-2]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Jetpacks在JSON中提取子字符串

来自分类Dev

从字符串中提取元素的更好策略

来自分类Dev

在MySQL中提取子字符串

来自分类Dev

如何在InnoSetup中提取子字符串?

来自分类Dev

从字符串中提取子字符串,python

来自分类Dev

在python中提取子字符串

来自分类Dev

从列值中提取子字符串

来自分类Dev

寻找从字符串中提取未知子字符串的最简单方法。(用斜杠隔开)

来自分类Dev

在批处理脚本中提取子字符串

来自分类Dev

如何在Bash中提取多个唯一子字符串

来自分类Dev

Swift:从字符串中提取子字符串

来自分类Dev

从日志消息中提取子字符串(GROK)

来自分类Dev

从字符串的“列表”中提取子字符串

来自分类Dev

命令行:从输出中提取子字符串

来自分类Dev

Excel从字符串中提取子字符串

来自分类Dev

jQuery 2.1.0 | 分隔长字符串并从中提取子字符串的更好方法

来自分类Dev

php:从字符串中提取子字符串

来自分类Dev

bash从“ 1.2.3-SNAPSHOT”中提取一个子字符串

来自分类Dev

从文件名中提取特定的子字符串

来自分类Dev

在bash中提取子字符串字典?

来自分类Dev

在PHP中提取字符串的子字符串的最有效方法

来自分类Dev

从文件中提取子字符串

来自分类Dev

从字符串中提取子字符串

来自分类Dev

Solr从查询中提取子字符串

来自分类Dev

从字符串 [] 中提取值的 Linq 或更好的方法

来自分类Dev

在 MySQL 中提取子字符串之间的文本

来自分类Dev

从 C 中较长的字符串中提取子字符串的最佳方法是什么

来自分类Dev

从字符串中提取一些字符串的更好方法

来自分类Dev

如何在Powershell中提取子字符串

Related 相关文章

热门标签

归档