【问题标题】:Regex rename a filename using rename linux command正则表达式使用 rename linux 命令重命名文件名
【发布时间】:2019-06-12 02:50:18
【问题描述】:

我正在尝试将文件 first_second.pdf 重命名为 first_0second.pdf

所以,我阅读了有关捕获和反向引用的信息。但不知何故它不起作用。谁能告诉我我做错了什么?

rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

我希望 first_1.pdf 重命名为 first_01.pdf

【问题讨论】:

  • 你陈述你所期望的,而不是正在发生的事情。 rename 至少需要三个参数,因此您应该从示例中收到使用错误消息。

标签: regex rename


【解决方案1】:

问题在于转义字符和包围后面引用的大括号。这是因为 rename 在内部使用 posix-extended。如果 rename 使用 posix-basic 作为正则表达式,则转义字符是必要的。

通过删除转义并为后面的引用添加大括号,正则表达式起作用了。

rename 's/(.*_)([1-9]).pdf$/${1}0${2}.pdf/' first_1.pdf

【讨论】:

    【解决方案2】:

    -n 参数向您展示了它在没有实际执行的情况下会做什么,这对测试很有好处。 匹配并捕获第一部分直到并包括下划线。然后匹配并捕获 1 个或多个数字,后跟文字点和其他任何内容,直到行尾。替换为第一个捕获的组(组号周围的大括号,以便将其与文字“0”分开),文字“0”,然后是剩余的 2 个捕获的组。

    rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf
    
    rename(first_1.pdf, first_01.pdf)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-22
      • 2013-08-31
      • 2011-12-09
      • 2011-09-14
      • 2012-08-02
      • 2015-04-23
      • 2016-03-20
      相关资源
      最近更新 更多