
私は 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;' {} \;
おそらくと言ったことに注意してください。ここでも同じ推奨事項が適用されます。まず最新のバックアップがあることを確認し、いくつかのファイルでテストしてください。ないこれによりコード ベースが不可逆的に破壊された場合は、責任を負います。