假设我有一个名为GATES, Bill.jpg的文件,我想将它们全部重命名为Bill Gates.jpg。我能抓住两个字

rename 's/^(.*?), (.*?)\./$2 $1\./g' *

要更改大小写,有一些Perl的功能:
$lower = lc("aBcDe");  # $lower is assigned "abcde"
$upper = uc("aBcDe");  # $upper is assigned "ABCDE"
$lower = lcfirst("HELLO");  # $lower is assigned "hELLO"
$upper = ucfirst("hello");  # $upper is assigned "Hello"

我试图利用它们:
rename 's/^(.*?), (.*?)\./$2 ucfirst($1)\./g' *

但这是行不通的。

最佳答案

您需要在正则表达式的末尾添加“e”(eval)标志,否则该函数将不会执行。这意味着s///表达式的整个第二部分必须是有效的Perl表达式(而不是有效的字符串):

rename 's/^(.*?), (.*?)\./"$2 " . ucfirst(lc($1)) . "."/ge' *

(另请注意,使用$2在字符串内留有多余的空格)

可以在perlre文档中找到有关此标志的更多信息。

10-07 15:05