我想用名称中的'sr'重命名文件,用'SR'替换'sr'。这一次成功了:perl在命令行中批量重命名文件
ls | perl -e 'while(<>){chomp;if(/(.*)sr(.*)/){rename $_,$1."SR".$2}}'
但是这一次失败:
ls | perl -e "while(<>){chomp;if(/sr/){rename $_,$\`.'SR'.($')}}"
与此错误消息:
Not enough arguments for rename at -e line 1, near "rename ,"`
Execution of -e aborted due to compilation errors.
看来,$ _已成为一个空字符串,但我不不太明白为什么。感谢您的任何解释。
现在的报价是一个有趣的问题,这是我的测试:
ls | perl -e "while(<>){chomp;if(/sr/){print $_;print\"\n\";print $\`,$&,($');print \"\n\";print $_,$\`,$&,($');print\"\n\";print $_;print\"\n\"}}"
输出这样的:
3sr
3sr
3sr
3sr
sr1
sr1
sr1
sr1
sr2
sr2
sr2
sr2
似乎单独使用时,$ _是不是空的;但在与$`,$ &和$'一起使用时它变空了。根据每个文件的最后一行,我猜想$ _在不单独使用时会暂时更改?
此外,根据a1111exe的答案,我测试:
ls | perl -e "while(<>){chomp;if(/sr/){print \$_,$\`,$&,($');print \"\n\"}}"
,并得到这个:
3sr3sr
sr1sr1
sr2sr2
这不仅仅是因为你已经使用了“围绕perl代码,因此任何以$开头的东西都将被当作shell变量而不是perl吗? –
但这个按预期工作: 'ls | perl -e“而(<>){终日啃食;如果(/ SR /){打印$ _}}”' 这将打印文件名 – jsjie
之外,我改变了使用引号,否则$”变量将引发的问题我。试图$ \“和$ \\”,但没有用的。 – jsjie