この質問にはすでに回答があります :/*…*/に該当するすべての文字を削除するにはどうすればよいですか?
(9つの回答)
4年前に閉鎖されました。
Linux
(9つの回答)
4年前に閉鎖されました。
現在のディレクトリのCファイル内のすべてのコメントとその間のすべてを削除するスクリプトを作成しようとしています。 sed
を使用しています 、そしてこれは私がこれまでに持っているものです:
sed -i '/ * [^()] */d' *.c
これは、コメントがアスタリスクまたはバックスラッシュと同じ行にある場合に機能します。
ただし、スラッシュやアスタリスクのないコメント行がある場合は機能しません。
sedが1行ずつ移動することは知っていますが、*/
が表示されるまで削除を続けるように指示する方法がわかりません。 。
承認された回答:
実際のCプリプロセッサを使用せずにコメントを削除することは、必ずしも簡単なことではありません。私はかつてこのようなものを思いついた:
perl -0777 -pe'
s{
/*.*?*/
| //[^n]*
| (
"(?:\.|.)*?"
| '''(?:\.)?.*?'''
| ??'''
| .[^'''"/]*
)
}{if ($1eq""){" "}else{$1}}exsg'
次のようなほとんどの場合をカバーする必要があります:
printf("%c%c%s", '"' /* d-quote */, ''', "/*" "*/");
詳細については、そこでの興味深い議論を参照してください。