다음과 같이 파일의 일부 문자를 변경하려고 합니다.
//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;
}