sed를 사용하여 Java 파일의 여러 줄 주석을 한 줄 주석으로 바꾸는 방법은 무엇입니까?

sed를 사용하여 Java 파일의 여러 줄 주석을 한 줄 주석으로 바꾸는 방법은 무엇입니까?

다음과 같은 파일이 있다고 가정해 보겠습니다 Test.java.

import java.io.*;

/* test comment */
public class Test { /* another test comment */
    ...
    ...
    ...
}

Java 프로그램에는 한 줄 //주석과 여러 줄 /* ... */주석이 포함될 수 있습니다. 내가 이루고 싶은 것은 /* ... */한 줄을 차지하는 주석을 찾아서 주석으로 바꾸는 것입니다. 따라서 교체 후에는 다음과 같아야 합니다.Test.java//Test.java

import java.io.*;

// test comment
public class Test { // another test comment
    ...
    ...
    ...
}

나는 sed다음을 수행하여 이를 수행하려고 합니다.

sed -ri 's//\* ([.]*[ ]*) \*//// \1/' Test.java

그러나 이것은 아무것도 바뀌지 않는 것 같습니다. 그렇다면 나머지 줄은 그대로 유지하면서 어떻게 주석을 바꿀 수 있는지 궁금합니다. 이 동작을 구현하는 방법을 잘 모르겠습니다. 내 정규 표현식이 어떻게 든 꺼져 있다고 생각하지만 그 이유를 완전히 모르겠습니다. 어떤 피드백이나 제안이라도 대단히 감사하겠습니다.

답변1

이렇게 하면 됩니다:

sed 's_/\*\(.*\)\*/_//\1_' <Test.java

작동 방식은 다음과 같습니다.

  • 문자를 _벗어날 필요가 없도록 구분 기호로 사용합니다./
  • /\*'/*' 일치(이스케이프됨 *)
  • \(위의 내용을 사용했던 것을 기억합니다.\)
  • 그런 다음 '//'(이스케이프할 필요 없음)과 기억하는 내용으로 바꾸세요.\1

요구사항을 충족하는 것으로 확인되면 다음을 추가 -i하고 제거하세요 <.

sed -i 's_/\*\(.*\)\*/_//\1_' Test.java

답변2

두 번째 요점은 다음과 같습니다.

'/*' is matched with /\* (escaping the *) and '*/' is matched with \*/

관련 정보