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스위치 추가

관련 정보