Rename
如何在組標識符之間轉義數字
我正在使用實用程序rename來重命名多個文件,但我不知道應該如何在組標識符之間轉義數字。它必須是基本的,但我從未遇到過這種情況,而且我的直覺並不能幫助我找到正確的轉義字元。
我想將文件名中的任何數字替換為
23
. 我嘗試了以下方法:rename -n 's/(.*)([0-9]{2})(.*)/$1"23"$3/' * $ rename -n 's/(.*)([0-9]{2})(.*)/$1"23"$3/' * rename(Request22Message.json, Request"23"Message.json) rename(Response22ExpectedMessage.json, Response"23"ExpectedMessage.json) rename(Response22Message.json, Response"23"Message.json)
在這種情況下,點可能被視為連接字元:
$ rename -n 's/(.*)([0-9]{2})(.*)/$1.23.$3/' * rename(Request22Message.json, Request.23.Message.json) rename(Response22ExpectedMessage.json, Response.23.ExpectedMessage.json) rename(Response22Message.json, Response.23.Message.json)
不。
這並不是真正逃避數字的問題 - 這是一個消除歧義的問題,
$123
作為對 capture group 的引用123
。此案例在 \1 而不是 $1 上的警告perlre
下的文件中切線地涵蓋如果你嘗試做
s/(\d+)/\1000/;
你不能通過說來消除歧義
\{1}000
,而你可以用${1}000
.所以,例如
rename -n 's/(.*)([0-9]{2})(.*)/${1}23$3/' *.json
或(對稱)
rename -n 's/(.*)([0-9]{2})(.*)/${1}23${3}/' *.json
您可以使用字元串連接運算符
.
,但這需要添加執行標誌:rename -n 's/(.*)([0-9]{2})(.*)/$1."23".$3/e' *.json