(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.