Regex 重命名正则表达式中的Bash变量

Regex 重命名正则表达式中的Bash变量,regex,bash,rename,batch-rename,Regex,Bash,Rename,Batch Rename,我正在编写一个bash脚本来重命名文件名并使用命令 rename 's/\d+/sprintf("%02d", $&)/e' * 但是我想用类似于“%0”$var“d”的东西替换“%02d”,从而用$var替换“2”,但它似乎不起作用,而且我不太熟悉正则表达式以及如何使用escape\并希望得到帮助当然,您的整个表达式都在单引号内,没有执行扩展。要展开命令的一部分,请将其从引号中移出: rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *

我正在编写一个bash脚本来重命名文件名并使用命令

rename 's/\d+/sprintf("%02d", $&)/e' *

但是我想用类似于“%0”$var“d”的东西替换“%02d”,从而用$var替换“2”,但它似乎不起作用,而且我不太熟悉正则表达式以及如何使用escape\并希望得到帮助

当然,您的整个表达式都在单引号内,没有执行扩展。要展开命令的一部分,请将其从引号中移出:

rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *
或者将整个表达式放在双引号中,但您需要转义更多内容:

rename "s/\\d+/sprintf(\"%0${var}d\", \$&)/e" *

当然,您的整个表达式都在单引号内,不执行任何扩展。要展开命令的一部分,请将其从引号中移出:

rename 's/\d+/sprintf("%0'"$var"'d", $&)/e' *
或者将整个表达式放在双引号中,但您需要转义更多内容:

rename "s/\\d+/sprintf(\"%0${var}d\", \$&)/e" *

您还可以通过环境传递值

env var=5 rename 's/\d+/sprintf("%0$ENV{var}d", $&)/e' *

您还可以通过环境传递值

env var=5 rename 's/\d+/sprintf("%0$ENV{var}d", $&)/e' *

谢谢你的快速回答,你能删除一个链接来了解转义字符吗?我通常只需键入
man bash
或谷歌,比如当不可用时。Ohk会检查出来的谢谢你的快速回答,你可以删除一个链接来了解转义字符吗?我通常只需键入
man bash
或google,以查找不可用时的内容。Ohk会检查出来的。谢谢你的回答,但单引号中是否可以识别$ENV?是的。对于perl重命名,单引号内是一个perl表达式,$ENV{var}是访问环境变量的perl方法。更重要的是,因为我们需要perl来计算该变量,所以我们要求它在单引号中(或者我们需要从shell中转义它)。谢谢您的回答,但是$ENV在单引号中可以识别吗?是的。对于perl重命名,单引号内是一个perl表达式,$ENV{var}是访问环境变量的perl方法。更重要的是,因为我们需要perl来计算这个变量,所以我们要求它在单引号中(或者我们需要从shell中转义它)