將 () 與 Unix/Linux 正規表示式匹配

將 () 與 Unix/Linux 正規表示式匹配

我有幾個文件的名稱

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

由於許多處理工具並不真正喜歡檔案名稱中的(and ,)我認為最好將它們重命名為不同的名稱。我在谷歌上搜尋了重命名文件,發現了一個很棒的工具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 正規表示式中匹配(and 呢?)

答案1

這是您需要的:

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

它首先在當前目錄中查找與所描述的名稱相符的文件,然後透過刪除括號來重新命名它們。您可以看到匹配的字元 ( 和 ) 被替換為任何內容。

相關內容