首页 > 解决方案 > 在 bash 中使用正则表达式重命名文件

问题描述

我正在尝试使用正则表达式来重命名这篇文章之后的几个文件

使用正则表达式重命名文件 - Linux

有我的文件-

abcd_some_random_alphanumeric_1.pdf
abcd_some_random_alphanumeric_2.pdf
abcd_some_random_alphanumeric_3.pdf
abcd_some_random_alphanumeric_4.pdf
abcd_some_random_alphanumeric_5.pdf

我想将文件重命名为

abcd_1.pdf
abcd_2.pdf 
abcd_3.pdf 
abcd_4.pdf 
abcd_5.pdf 

我正在尝试以下

rename 's/abcd_.*_(/d+).pdf/abcd_${1}.pdf/' *.pdf

但我得到很多错误 -

Unknown regexp modifier "/a" at (user-supplied code), near ""
Unknown regexp modifier "/b" at (user-supplied code), near "{
#line 1
"
Unknown regexp modifier "/c" at (user-supplied code), near "{
#line 1
...........
"

但是,我最终想要 _1、_2、_3 等。我不知道如何使用正则表达式从原始字符串中捕获数据并将捕获的组放入替换部分。

标签: regex

解决方案


您的语法已关闭,正则表达式中的单个数字是\d,带有反斜杠而不是正斜杠。扩展名中的点也.pdf应该被转义。尝试这个:

rename 's/abcd_.*_(\d+)\.pdf/abcd_$1.pdf/' *.pdf

推荐阅读