我正在使用 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;' {} \;
请注意我说的是可能。同样的建议也适用于此:首先确保您有最新的备份,然后先在几个文件上进行测试。我不是如果这不可逆转地破坏了你的代码库,你就要负责任。