sed [duplicate]를 사용하여 모든 C 주석을 제거하십시오.

sed [duplicate]를 사용하여 모든 C 주석을 제거하십시오.

현재 디렉터리에 있는 C 파일 내의 모든 주석과 모든 내용을 삭제하는 스크립트를 작성하려고 합니다. 나는 이것을 사용해 왔으며 sed이것이 지금까지 내가 가지고 있는 것입니다:

sed -i '/ * [^()] */d' *.c

이 방법은 주석이 별표 또는 백슬래시와 같은 줄에 있을 때 작동합니다.

그러나 주석 줄에 슬래시나 별표가 없으면 작동하지 않습니다.

나는 sed가 한 줄씩 진행된다는 것을 알고 있지만 */.

답변1

실제 C 전처리기를 사용하지 않고 주석을 제거하는 것은 쉽지 않습니다.언젠가 이런 생각을 한 적이 있다:

perl -0777 -pe'
 s{
     /\*.*?\*/
   | //[^\n]*
   | (
        "(?:\\.|.)*?"
      | '\''(?:\\.)?.*?'\''
      | \?\?'\''
      | .[^'\''"/]*
     )
  }{if ($1eq""){" "}else{$1}}exsg' 

여기에는 다음과 같은 대부분의 경우가 포함됩니다.

printf("%c%c%s", '"' /* d-quote */, '\'', "/*" "*/");

자세한 내용은 흥미로운 토론을 참조하세요.

답변2

에서 이 작업을 수행할 필요가 없으면 sedPerl을 사용하여 쉽게 수행할 수 있습니다.

perl -p0i -e 's#/\*.*?\*/##sg' *.c

아래 주석의 예에 표시된 것처럼 이렇게 하면 주석의 일부가 아닌 인용된 문자열의 일부가 제거됩니다.

관련 정보