簡體   English   中英

正則表達式使用 rename linux 命令重命名文件名

[英]Regex rename a filename using rename linux command

我正在嘗試將文件 first_second.pdf 重命名為 first_0second.pdf

因此,我閱讀了有關捕獲和反向引用的信息。 但不知何故它不起作用。 誰能告訴我我做錯了什么?

rename 's/\(.*_\)\([1-9]\).pdf$/$10$2.pdf/' first_1.pdf

我期待 first_1.pdf 重命名為 first_01.pdf

-n參數向您展示了它將要做什么,而無需實際執行它,這對測試有好處。 匹配並捕獲第一部分直到並包括下划線。 然后匹配並捕獲 1 個或多個數字,后跟文字點和其他任何內容,直到行尾。 替換為第一個捕獲的組(組號周圍的大括號以將其與文字“0”分開),文字“0”,然后是剩余的 2 個捕獲組。

rename -n 's/(.*_)([0-9]+)(\..*)$/${1}0$2$3/' first_1.pdf

rename(first_1.pdf, first_01.pdf)

問題是轉義字符和圍繞后引用的大括號。 這是因為重命名在內部使用 posix-extended。 如果重命名使用 posix-basic 作為 regextype,則需要轉義字符。

通過刪除轉義並為反向引用添加大括號,正則表達式起作用了。

rename 's/(.*_)([1-9]).pdf$/${1}0${2}.pdf/' first_1.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM