括弧を使用したファイル項目の名前変更

括弧を使用したファイル項目の名前変更

私は 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;' {} \;

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

関連情報