假设我有一个名为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
文档中找到有关此标志的更多信息。