使用 Unix/Linux 正则表达式匹配 ()

使用 Unix/Linux 正则表达式匹配 ()

我有几个文件的名字是

(a).1
(a).2
...
(a).100

由于许多处理工具并不真正喜欢文件名中的(“和”,)我认为最好将它们重命名为其他名称。我在 Google 上搜索了重命名文件的方法,找到了一个很棒的工具,rename我可以在其中输入正则表达式。好的,让我们试试这个:

$ rename -v s/\(a\)/b/ \(a\).* 

(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3

嗯,不是我所期望的。经过一番谷歌搜索,我发现这\( \)是一个分组运算符。这有点道理,因为我没有( )在命令中逃避。

我通过使用与.所有类型的值匹配的字符解决了重命名问题:

rename -v s/.b./b/ \(b\).*

这个解决方案不太好。那么如何在 Bash/Linux/Unix Regex 中匹配(和?)

答案1

您需要:

find -name "(*)*" -type f | rename 's/\(|\)//g'

它首先在当前目录中查找与描述的名称匹配的文件,然后通过删除括号来重命名它们。您可以看到匹配的字符(和)被替换为空。

相关内容