sedを使用して特定の条件に基づいてファイル内のすべてのJavaテストメソッド名を変更する

sedを使用して特定の条件に基づいてファイル内のすべてのJavaテストメソッド名を変更する

私が作業しているプロジェクトで、*Test*.java(AccountServiceTest.javaなど)という名前のすべてのファイルを繰り返すスクリプトを生成しようとしています。各ファイルにはJavaテストメソッドが含まれています。長年にわたり、各チームメンバーは命名規則を異なる方法で解釈し、最終的にテストメソッド名がめちゃくちゃになりました。リファクタリング操作でこれらすべてのメソッド名を正しく変更しようとします。手動では時間がかかりすぎるため、Bashスクリプトを使用してみました。スクリプトは、チームが議論した規則に従ってメソッド名を変更する必要があります。

たとえば、

...
public void givensomethingWhensomethingElseThensomethingElse() {
...

結果は次のとおりです。

...
public void given_something_when_somethingElse_then_somethingElse() {
...

私は今、次の措置を講じるべきだと思います。

  1. 「public void」を含む行を選択してください。

  2. 与えられたものをキャプチャし、小文字であることを確認してください(GIVEN_somethingが与えられた_somethingにつながります)

  3. 時間をキャプチャして小文字であることを確認してください。

  4. その後、キャッチして小文字であることを確認します。

  5. 与えられた文字といつの間の文字列を取得します(または時にはメソッド名にwhenステートメントがない場合もあります)。

     - String found for example is _SomeRandomText
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front and in back --> _someRandomText_ 
     - result is : ...given_someRandomText_when...
    
  6. when と then の間の文字列をキャプチャします。

     - String found for example is _SomeRandomText   
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front and in back --> _someRandomText_
     - result is : ...when_someRandomText_then... 
    
  7. thenと角かっこの間の文字列をキャプチャします。

     - String found for example is _SomeRandomText 
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front --> _someRandomText
     - result is : ...then_someRandomText(... 
    

私はsedがここで解決策になると思いますが、それを作成する方法がわかりません。誰でもどんなアイデアがありますか?

答え1

このように:

$ sed -E '/public void.*given.*when.*then/s/_(\w)/\U\1/g' file
public void givenSomethingWhenSomethingElseThenSomethingElse() {

5点、6点、7点は尊重しませんが、今は自分で適応する機会が十分になりました。

_[a-z]ここで私がしたことは、一致する文字を大文字に置き換えることです。

交換する必要がある場合所定の位置に-iスイッチの追加

関連情報