
我使用的是 macOS X,將其輸入終端以重命名一些內容:
find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject()/newObject("green")/g;' {} \;
這應該重命名所有:
getGreenObject()
和
newObject("green")
但它所做的是將 getGreenObject() 替換為:
newObject("green")()
這導致了很多錯誤。該指令似乎無法辨識「()」左右括號?
現在如何使用相同的命令修復所有這些錯誤?
答案1
括號被視為正規表示式語法的一部分(它們指示應將其內容視為一個群組),而不是作為要匹配的文字字元。要告訴正規表示式解析器將它們視為文字字符,您可以使用反斜線對其進行轉義:
find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject\(\)/newObject("green")/g;' {} \;
現在:您是否有發生此情況之前的備份,以便您可以返回並重試?當進行任何像這樣的大規模更改時,您應該始終確保您的備份是最新的(您有備份,對吧?),並且在將其釋放到主程式碼庫之前執行一個小測試。
如果您沒有可返回的備份,您可以像這樣修復它:
find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/newObject\("green"\)\(\)/newObject("green")/g;' {} \;
請注意,我說的是可能。同樣的建議也適用於此:確保您首先擁有最新的備份,並首先在幾個文件上進行測試。我是不是如果這不可逆轉地破壞了您的程式碼庫,請負責。