使用变量替换目录名称中的字符串


2

我有一个脚本设置为在文件夹中创建一个新的目录,该脚本基于为另一个目录命名的变量,如下所示:

str="/home/folder/test"
base="$(basename $str)"

mkdir -p "/home/folder2/${base}"

我现在想做的是在创建新文件夹时在此变量中查找并替换字符串。

例如,我有:

/Home/Album-Artist[FLAC] 

分配给变量。当我使用mkdir创建新目录时,我想查找“ FLAC”并将其替换为“ V0”,因此在新文件夹中

/Home/Album-Artist[V0]

Answers:


4

替换行:

base="$(basename $str)"

与:

base="$(basename $str | sed 's/FLAC/V0/')"

或者,如果您希望[]成为搜索模式的一部分,请执行以下操作:

base="$(basename $str | sed 's/\[FLAC\]/[V0]/')"

说明

  • |(或)字符实质上意味着“取结果,并将其进给到下一个节目”。

  • sed (流编辑器)命令接受输入,适用的命令给它,并输出结果。例如,s/FLAC/V0/sed中的命令的意思是“对于每个输入行,搜索FLAC并替换为V0(但不超过一次)”。

  • sed使用正则表达式而不是固定的搜索模式。这意味着您需要转义某些字符;因此,我的最后一个示例在搜索模式中说了\[\]而不是just []


2

bash本身你可以调用的sed,Perl,Python和SWIFT或其他语言。

如果您希望升级bash,请尝试:

${var%pattern}

%从变量的后面剥离了一个模式,因此您可以在一行中提取出结尾并固定在新变量上。

new=${base%\[FLAC\]}"[V0]" ## [FLAC] to [V0] with \ to escape []  

假设没有歌手或专辑会被FLAC匹配,搜索和替换功能就更加清楚了。上面的尾端搜索有助于解决这种情况,但是很难理解其意图。

new=${base/FLAC/V0}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.