GNU/Linux >> Linux Esercitazione >  >> Linux

Eliminare tutti i commenti C con Sed?

Questa domanda ha già risposte qui :Come posso eliminare tutti i caratteri che rientrano in /* … */ inclusi /* e */?

(9 risposte)
Chiuso 4 anni fa.

Sto provando a scrivere uno script che cancellerà tutti i commenti e tutto ciò che c'è in mezzo ai file C nella mia directory corrente. Sto usando sed , e questo è quello che ho finora:

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

Funziona quando i commenti sono sulla stessa riga di un asterisco o di una barra rovesciata.

Tuttavia non funziona quando è presente una riga commentata senza barra o asterisco.

So che sed va riga per riga, semplicemente non so come dirgli di continuare a cancellare finché non vede un */ .

Risposta accettata:

Rimuovere i commenti senza utilizzare un vero preprocessore C non è esattamente banale. Una volta mi è venuto in mente qualcosa del genere:

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

Che dovrebbe coprire la maggior parte dei casi come cose come:

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

Vedi l'interessante discussione per maggiori dettagli.


Linux
  1. Utilizzo di sed per dividere una stringa con un delimitatore

  2. Come rimuovere il carattere \r con sed

  3. Espressione regolare con sed

  4. Come faccio a elencare tutti gli utenti con root?

  5. sed sostituisce tutte le tabulazioni e gli spazi con un singolo spazio

Elenco di tutti gli indirizzi email in un file con grep

Utilizzo di più modelli contemporaneamente con il comando Sed

Come si combinano tutte le righe che terminano con un carattere barra rovesciata?

Mostra tutto il file fino alla partita?

Colorare l'output della coda con Sed?

Stampa commenti con PDF?