// C++ 주석의 모든 문자를 c 주석 문자로 변경합니다. /* */

// C++ 주석의 모든 문자를 c 주석 문자로 변경합니다. /* */

다음과 같이 파일의 일부 문자를 변경하려고 합니다.

//this is a thest of how this works
#include <stdio.h>

int main()
{
// declare some variables here
int num1 = 4;
float num2 = 3.5;

// print the result 
printf("The result is %f\n", num1 * num2); // this does it

/* does it work? */
return 0;
}

// C++에서 주석에 사용되는 모든 문자를 c 주석 문자 /* */로 변경하여 파일이 다음과 같이 보이도록 하고 싶습니다.

/*  This is a test of how this works */
#include <stdio.h>

/*this is a thest of how this works */
#include <stdio.h>

int main()
{
/* declare some variables here */
int num1 = 4;
float num2 = 3.5;

/* print the result  */
printf("The result is %f\n", num1 * num2); /* this does it */

/* does it work? */ */
return 0;
}

나는 bash를 전혀 모르고 이것이 내가 sed 's/////* *//g' myprog.c를 생각해낸 것인데 작동하지 않습니다. 내가 뭘 잘못하고 있거나 무엇이 필요한가요? 변경하려면 어떻게 해야 하나요? 한 줄 명령으로 만들려고합니다

답변1

sed 's|//\(.*\)|/*\1 */|'

그러나 다음과 같이 올바른 작업을 수행하지 못하는 상황이 많이 있다는 점에 유의하세요.

char *url = "http://host/";
/*
   comment with // nested C++-syle comment
 */
// comment \
continued on the next line

이러한 경우 등을 고려하여 코드를 조정할 수 있습니다.기타 질문과 답변처럼:

perl -0777 -pe '
  BEGIN{
    $bs=qr{(?:\\|\?\?/)};
    $lc=qr{(?:$bs\n|$bs\r\n?)}
  }
  s{
    /$lc*\*.*?\*$lc*/
    | /$lc*/((?:$lc|[^\r\n])*)
    | "(?:$bs$lc*.|.)*?"
    | '\''$lc*(?:$bs$lc*(?:\?\?.|.))?(?:\?\?.|.)*?'\''
    | \?\?'\''
    | .[^'\''"/?]*
  }{defined($1)?"/*$1 */":$&}exsg'

위의 예는 다음을 제공합니다.

char *url = "http://host/";
/*
   comment with // nested C++-syle comment
 */
/* comment \
continued on the next line */

답변2

필요한 것은 이것뿐입니다:

 's+//+/*+g' file | sed 's+\/\*.*+& */+'


/*this is a thest of how this works */
#include <stdio.h>

int main()
{
/* declare some variables here */
int num1 = 4;
float num2 = 3.5;

/* print the result  */
printf("The result is %f\n", num1 * num2); /* this does it */

/* does it work? */ */
return 0;
}

관련 정보