【问题标题】:bash rename using regex array substitutionbash 使用正则表达式数组替换重命名
【发布时间】:2011-05-31 09:16:01
【问题描述】:

我有一个与this post 非常相似的问题。

我想知道如何用指定的替换来重命名文件名中的出现。例如,如果原始文件名为:“the quick brown quick brown fox.avi”,我想将其重命名为“the slow red slow red fox.avi”。

我试过这个:

new="(quick=>'slow',brown=>'red')"
regex="quick|brown"
rename -v "s/($regex)/$new{$1}/g" *

但没有爱:(

我也试过

regex="qr/quick|brown/"

但这只会给出错误。知道我做错了什么吗?

【问题讨论】:

  • 不是回答你的问题,但我很久以前用 Perl 写过这个并且经常使用它:pastebin.com/BZ3MzMcn

标签: regex arrays bash rename


【解决方案1】:

根据您的示例,我认为您需要多个替换(不仅仅是将“快速棕色”转换为“慢红色”,而是将单词列表转换为新单词列表。您可以用分号分隔替换。这里是适用于您的示例的解决方案:

rename -v 's/quick/slow/g;s/brown/red/g' *

如果你真的想使用数组将旧字符串映射到新字符串,你可以在参数中塞进更多的 Perl 来重命名(但在某些时候你可能只是编写 Perl 脚本作为立场-单独脚本):

rename -v '%::new=(quick=>"slow",brown=>"red");s/(quick|brown)/$::new{$1}/g' *

【讨论】:

  • 非常感谢!数组最终可能确实会做更多的工作,但很高兴知道它是如何完成的 :)
猜你喜欢
  • 2020-01-19
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
相关资源
最近更新 更多