文字列の一部を削除する方法

文字列の一部を削除する方法

私はドキュメントとたくさんの投稿を読んでいますsedが、これを見つけることができないようです。私はたくさんのJavaファイルを持っています。これらのファイルでは、toInt()列挙型を整数に変換するメソッドを使用するメソッドが呼び出されます。すべてのファイルに移動し、.toInt()特定の列挙を削除したいです。

それが私が望むものです。元のコード文字列:

foo(ENUM_NAME.ENUM_VALUE.toInt(), arg2, arg3)
foo(ENUM_NAME.ENUM_VALUE2.toInt(), arg2, arg3)

私は次のように終わりたいです:

foo(ENUM_NAME.ENUM_VALUE, arg2, arg3)
foo(ENUM_NAME.ENUM_VALUE2, arg2, arg3)

ENUM_VALUE何百もの可能性があるため、ハードコードすることはできません。何を変えるべきか混乱した部分があるようで、もっと明確に説明するようにします。

TRANF_FIELD私のJavaファイルには列挙型という名前があります。この列挙に使用できる値は 2,000 個の値のいずれかです.toInt().toInt()無関係な.function名を削除する必要があります。

以下は、Javaコード全体に散在するコード構成の例とそれを処理する方法です。

TRANF_FIELD.TRANF_VALUE_1.toInt()
.toInt()削除してTRANF_FIELD.TRANF_VALUE_1残りはそのままにしたいと思います。ではないので、削除して変更を残したく
TRANF_FIELD.TRANF_KILL_ME.toInt()
                ありません。ないので変わることはありません。.toInt()TRANF_FIELD.TRANF_KILL_ME
TRANG_FIELD.TRANG_VALUE_1.toInt()
TRANF_FIELD
TRANF_FIELD.TRANF_VALUE_1.length()
.toInt()

ベストアンサー1

次の項目をすべて変更したいようです。

TRANF_FIELD.some_enum_value.toInt()

到着

TRANF_FIELD.that_enum_value

また、他の列挙型(例:)TRANG_FIELD.TRANG_VALUE.toInt()や他のメソッド(例TRANF_FIELD.TRANF_VALUE.length():)も保持します。これは簡単に見える:

sed 's/\(TRANF_FIELD\.[A-Za-z0-9_]*\)\.toInt()/\1/'

どこ

  • [A-Za-z0-9_]*任意数の英数字(下線付き)です。これは有効な列挙値と一致させるためのものです。実際には、空の文字列または数字で始まる文字列と一致するので、[A-Za-z_][A-Za-z0-9_]*より良いです。[A-Za-z0-9_]*
  • \(...\)列挙名(TRANF_FIELD)、リテラルピリオド(\.)、および列挙値(最初の箇条書きから)をグループ化します。
  • \1これは、「見つかった文字列全体を最初のグループに置き換える」、つまりその.toInt()部分を破棄することを意味します。
  • 1行に複数の項目を処理するには、g最後のスラッシュの後に(global)を追加します。
  • これは埋め込みスペースを処理しません(たとえばTRANF_FIELD . TRANF_VALUE、この問題を解決することは練習のままです)。
  • たとえば、次のように複数行にわたる式は処理されません。

        i = TRANF_FIELD
                 .TRANF_VALUE.toInt();
    

    これは修正するのがより困難です。

おすすめ記事