簡體   English   中英

在`util-linux`中使用帶有`rename`版本的正則表達式

[英]Using regex with `rename` version from `util-linux`

我正在使用GNU / Linux發行版,其中實用程序rename來自util-linux ,我想充分利用它的常規(Perl或POSIX)表達式。

rename兩個版本

  • “Perl”版本,語法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.

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