GNU/Linux >> Belajar Linux >  >> Linux

Menghapus Semua Komentar C Dengan Sed?

Pertanyaan ini sudah memiliki jawaban di sini :Bagaimana cara menghapus semua karakter yang termasuk dalam /* … */ termasuk /* &*/?

(9 jawaban)
Tutup 4 tahun yang lalu.

Saya mencoba menulis skrip yang akan menghapus semua komentar dan semua yang ada di antara file C di direktori saya saat ini. Saya telah menggunakan sed , dan inilah yang saya miliki sejauh ini:

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

Ini berfungsi saat komentar berada di baris yang sama dengan tanda bintang atau garis miring terbalik.

Namun itu tidak berfungsi ketika ada baris komentar tanpa garis miring atau tanda bintang.

Saya tahu sed berjalan baris demi baris, saya hanya tidak tahu bagaimana mengatakannya untuk terus menghapus sampai melihat */ .

Jawaban yang Diterima:

Menghapus komentar tanpa menggunakan C-preprocessor sebenarnya bukanlah hal yang sepele. Saya pernah menemukan sesuatu seperti ini:

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

Yang harus mencakup sebagian besar kasus seperti hal-hal seperti:

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

Lihat diskusi menarik di sana untuk lebih jelasnya.


Linux
  1. Perintah DD Linux - 15 Contoh dengan Semua Opsi

  2. Mencantumkan semua alamat email dalam file dengan grep

  3. Menggunakan beberapa pola sekaligus dengan perintah Sed

  1. Bagaimana Mencapai Portabilitas Dengan Sed -i (Pengeditan di Tempat)?

  2. Tambahan Dengan 'sed'?

  3. Tampilkan Semua File Hingga Pertandingan?

  1. Memanipulasi teks pada baris perintah dengan sed

  2. Bagaimana Cara Menggabungkan Semua Garis Yang Berakhir Dengan Karakter Backslash?

  3. sed pemula:mengubah semua kemunculan dalam folder