繁体   English   中英

正则表达式使用 rename linux 命令重命名文件名

[英]Regex rename a filename using rename linux command

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

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

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

我期待 first_1.pdf 重命名为 first_01.pdf

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

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

rename(first_1.pdf, first_01.pdf)

问题是转义字符和围绕后引用的大括号。 这是因为重命名在内部使用 posix-extended。 如果重命名使用 posix-basic 作为 regextype,则需要转义字符。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM