如何在printf中使用重命名命令

达伦·罗德里格斯(Darren Rodriguez)

当我试图修复电视连续剧的剧集编号时,我戏弄了重命名功能,并试图将printf的返回值作为重命名参数传递,但无法做到。我尝试了几乎所有的组合

for j in $(seq 1 9);
do 
    rename 's/"$( - "`printf "%d" ${j}`" - )"/"$( - "`printf "0%d" ${j}`" - )"/g' *
done

我能想到的,但似乎没有任何效果。我最终只是手动完成,因为在这种情况下,我只关心1-9,所以

rename 's/- 1 -/- 01 -/g' *
rename 's/- 2 -/- 02 -/g' *
...

有人可以指出为什么以上这些方法不起作用以备将来参考吗?

您单引号引用了整个表达式,因此不会进行外壳插值,并且Perl将看到最奇怪的正则表达式"$( - "printf“%d” $ {j} " - )",该表达式由Perl插值成类似

% perl -E 'say qq{"$( - "`printf "%d" ${j}`" - )"}'
"42 640 - "`printf "%d" `" - )"
% 

因为您要求Perl内插$(您可以通过阅读变量perldoc -v '$('可以说,此正则表达式可能与您的文件不匹配。(并且演示了尝试将多种语言嵌入到一个非常复杂的字符串中的几种陷阱之一;实际上,Perl可以做到这一点完全没有必要。)

更好的方法是匹配并调整您感兴趣的内容,这里似乎是连字符所包围的数字;假设文件名中仅存在一个数字,则只需在保存后向引用的那个数字上进行匹配,([0-9]+)然后使用Perlsprintf函数适当地填充这些数字(加上重要/e标志,将右侧视为sprintf实际上被调用的表达式)。

% touch "blah - "{1..9}" - blah"
% ls
blah - 1 - blah blah - 3 - blah blah - 5 - blah blah - 7 - blah blah - 9 - blah
blah - 2 - blah blah - 4 - blah blah - 6 - blah blah - 8 - blah
% rename 's/([0-9]+)/sprintf "%02d", $1/e' *
% ls
blah - 01 - blah    blah - 04 - blah    blah - 07 - blah
blah - 02 - blah    blah - 05 - blah    blah - 08 - blah
blah - 03 - blah    blah - 06 - blah    blah - 09 - blah
% 

如果文件名中的其他地方有数字,请为此输入正则表达式,例如

% rename 's/- ([0-9]+) -/sprintf "- %d -", $1/e' *
% ls
blah - 1 - blah blah - 3 - blah blah - 5 - blah blah - 7 - blah blah - 9 - blah
blah - 2 - blah blah - 4 - blah blah - 6 - blah blah - 8 - blah
% 

rename最有效地使用正则表达式,请参见

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在熊猫中使用通配符重命名多列

如何在bash中使用通配符重命名文件?

如何在Visual Studio中使用SSDT重命名表

如何在Subversion中使用@字符移动/重命名文件

如何在PowerShell中使用条件语句重命名文件

如何在重命名功能(c ++)中使用变量?

如何在目录和子目录中使用find命令重命名文件的一部分

如何使用find命令重命名文件

如何在GCP中使用gcloud cli重命名现有的“命名配置”?

使用重命名命令重命名文件

如何在 Windows 中使用命令提示符将我的文件夹及其任何子文件夹重命名为小写?

如何在子目录上使用命令“重命名”

如何在重命名命令中增加变量值

如何在 python 中重命名命令(print、os.<...>)?

如何在C#中使用字符串格式重命名文件?

如何在PowerShell中使用国际字符重命名目录?

如何在Kendo UI中使用其选定的tabIndex重命名当前选定的标签

如何在URL中使用不同的名称作为Area而不重命名文件

如何在Linux中使用正则表达式捕获组重命名文件?

如何在C ++中使用“未知”名称重命名文件?

如何在直方图中使用字典重命名现有的xticklabel

如何在 Windows 中使用批处理重命名文件夹?

如何在PowerShell中使用连续的数字重命名每个.jpg文件名

如何在R中使用别名/同义词词典重命名列名?

如何在SoapUi中使用Groovy重命名测试用例或测试步骤

如何在终端中使用关键字/特定文本重命名?

如何在Python中使用熊猫重命名DataFrame中的列

如何在c#中使用Process通过批处理重命名文件

如何在 Pandas 中使用带有融化和重命名的 for 循环?