// 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行のコマンドで作成しようとしています

答え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;
}

関連情報