sed [duplicate] を使用してすべての C コメントを削除します。

sed [duplicate] を使用してすべての C コメントを削除します。

現在ディレクトリにあるCファイル内のすべてのコメントとすべての内容を削除するスクリプトを作成しようとしています。私はこれを使っており、sedこれが私が今まで持っていたものです:

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

この方法は、コメントがアスタリスクやバックスラッシュと同じ行にあるときに機能します。

ただし、コメント行にスラッシュやアスタリスクがない場合は機能しません。

私はsedが1行ずつ進むことを知っていますが*/

ベストアンサー1

実際のCプリプロセッサを使用せずにコメントを削除するのは簡単ではありません。いつかこんな考えをしたことがある:

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

これには、次のようなほとんどの場合が含まれます。

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

詳しくは興味深い議論をご覧ください。

おすすめ記事