[英]Using regex with `rename` version from `util-linux`
我正在使用GNU / Linux發行版,其中實用程序rename
來自util-linux
,我想充分利用它的常規(Perl或POSIX)表達式。
rename 's/^fgh/jkl/' fgh*
util-linux
版本,語法rename fgh jkl fgh*
如果第一個使用正則表達式看起來非常明顯,那么我就無法輕松訪問它。 但是,我對第二個問題感到困惑:我找不到任何有關可能用途的相關文檔或示例,以及在這種情況下要使用的正則表達式的格式。
舉一個簡單的例子,我們來看一個包含以下內容的目錄:
foo_a1.ext
foo_a32.ext
foo_c18.ext
foo_h12.ext
我想使用像這兩行之一的語法:
rename "foo_[a-z]([0-9]{1,2}).ext" "foo_\1.ext" *
rename "foo_[:alpha:]([:digit:]{1,2}).ext" "foo_\1.ext" *
預期產出為:
foo_1.ext
foo_32.ext
foo_18.ext
foo_12.ext
當然這不起作用! 要么我缺少一些明顯的東西,要么沒有實現的方法來使用這個工具的實際正則表達式。
(請注意,我知道在shell解釋器中使用正則表達式重命名文件的其他可能性;此問題針對特定版本的rename
工具。)
這是手冊頁: http : //linux.die.net/man/1/rename 。 這很簡單:
從 對文件重命名......
重命名將由在他們的名字從替換第一次出現指定的文件重命名。
我相信沒有正則表達式,它只是普通的子串匹配。
以下命令提供輸入文件的預期結果,但使用perl
版本:
rename 's/foo_\D+(\d+)/foo_$1/' *.ext
您可以使用-n
選項測試命令以重命名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.