【问题标题】:renaming files using regular expression in bash在 bash 中使用正则表达式重命名文件
【发布时间】:2018-11-12 06:30:55
【问题描述】:

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

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

【问题讨论】:

  • 那里有一个警告,用粗体字表示:“还有其他同名的工具可能会也可能不会,所以要小心。”确实, man7.org/linux/man-pages/man1/rename.1.html 显示了一个完全不同的实用程序。检查你的手册页/帮助文本。

标签: regex


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用以下方法:

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

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 2012-08-31
      • 2020-01-19
      • 2011-09-14
      • 2017-08-10
      • 2013-08-06
      • 2013-01-29
      • 2012-08-02
      相关资源
      最近更新 更多