現在ディレクトリにある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 */, '\'', "/*" "*/");
詳しくは興味深い議論をご覧ください。
答え2
でこれを行う必要がない場合は、sed
Perlを使用して簡単に実行できます。
perl -p0i -e 's#/\*.*?\*/##sg' *.c
以下のコメントの例に示すように、これはコメントの一部ではなく引用符付き文字列の一部を削除します。