正则表达式查找替换以反斜杠开头或开头的字符串

正则表达式查找替换以反斜杠开头或开头的字符串

我的音乐库中有一张合辑专辑,其歌曲标题的形式为,由于斜杠,ARTIST/ TITLE这使得很难cp或这些文件。mv因此,我想将这些文件重命名为 以Title (Artist)使它们更易于管理(并且也使它们的命名方式与我的音乐库的其余部分一致)。这是我到目前为止所拥有的:

#! /bin/bash

for i in ./*.flac; do
TITLE=`ls "$i" | sed #display string after backslash`
ARTIST=`ls "$i" | sed #display string before backslash`

mv ./"$i" ./"$TITLE ($ARTIST)"

done

还要记住,斜杠后面有一个空格,ARTIST/ TITLE也可能会弄乱事情。

答案1

我认为你的问题是:

我有一个包含字符串的 bash 变量;我想将它分成两部分,在字符串之前和之后"/ "

如果是这样,这里有一个简单的 bash 解决方案:

track="Judy Garland/ Somewhere Over the Rainbow"
title="${track#*/ }"
artist="${track%%/ *}"

语法#的意思是“没有匹配...的最短前缀”。语法%%的意思是“没有匹配...的最长后缀”。 (类似地,##应该是最长的前缀和%最短的后缀。)该模式是普通的 bash glob(如果shopt -s extglob有效,则为扩展的 bash glob)。这是不是一个正则表达式。

如果模式不匹配,则字符串将不加修改地返回,您可能应该检查该条件,特别是如果您不确定斜杠后面是否有空格。


顺便问一下,你为什么使用ls "$i"?当然,这与 的值没有什么不同$i;你也可以使用echoor 一个“here-string”:

sed '# some sed magic' <<<"$i"

相关内容