GNU/Linux >> Linux の 問題 >  >> Linux

SedですべてのCコメントを削除しますか?

この質問にはすでに回答があります :/*…*/に該当するすべての文字を削除するにはどうすればよいですか?

(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 */, ''', "/*" "*/");

詳細については、そこでの興味深い議論を参照してください。


Linux
  1. Sed -i(インプレース編集)で移植性を実現するにはどうすればよいですか?

  2. 「sed」を追加しますか?

  3. 一致するまですべてのファイルを表示しますか?

  1. sed で \r 文字を削除する方法

  2. 文字を再帰的にsedに置き換える方法は?

  3. sed で数字を 2 桁にゼロ埋めする

  1. sed による正規表現

  2. root を持つすべてのユーザーを一覧表示するにはどうすればよいですか?

  3. sed すべてのタブとスペースを単一のスペースに置き換えます