Rename

如何在組標識符之間轉義數字

  • April 2, 2021

我正在使用實用程序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

引用自:https://unix.stackexchange.com/questions/643221