在bash中使用正则表达式重命名文件

时间:2018-06-02 08:13:32

标签: regex

我正在尝试使用正则表达式重命名此帖子之后的几个文件

Renaming files using regular expressions - 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等。我不知道如何使用原始字符串中的正则表达式捕获数据,并将捕获的组放入替换部分。

2 个答案:

答案 0 :(得分:0)

您的语法已关闭,正则表达式中的单个数字为\d,反斜杠不是正斜杠。此外,扩展程序.pdf中的点应该被转义。试试这个:

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

答案 1 :(得分:0)

使用以下方法:

rename -n 's/^(abcd).*(_[0-9]+\.pdf)$/$1$2/' *.pdf
  • $1$2 - 第1和第2个被捕获的小组