다음과 같은 파일이 있다고 가정해 보겠습니다 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 \*/