首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式使用rename linux命令重命名文件名

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

Stack Overflow用户
提问于 2019-01-18 04:28:40
回答 2查看 85关注 0票数 2

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

因此,我阅读了有关捕获和反向引用的内容。但不知何故,它不起作用。有人能告诉我我哪里做错了吗?

代码语言:javascript
复制
rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

我期望将first_1.pdf重命名为first_01.pdf

EN

回答 2

Stack Overflow用户

发布于 2019-01-18 05:31:16

-n参数向您展示了它将做什么,而不是实际执行它,这对测试很有好处。匹配并捕获下划线之前的第一部分,包括下划线。然后匹配并捕获1个或多个数字,后面跟着文字点,直到行尾为止。替换为第一个捕获的组(用括号括起组编号,以便将其与文字‘0’分开)、文字'0',然后替换剩余的两个捕获的组。

代码语言:javascript
复制
rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf

rename(first_1.pdf, first_01.pdf)
票数 1
EN

Stack Overflow用户

发布于 2019-01-18 06:36:09

问题在于后向引用的转义字符和大括号。这是因为rename在内部使用了posix-extended。如果rename使用posix-basic作为regextype,则必须使用转义字符。

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

代码语言:javascript
复制
rename 's/(.*_)([1-9]).pdf$/${1}0${2}.pdf/' first_1.pdf
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54243806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档