(9 réponses)
Fermé il y a 4 ans.
J'essaie d'écrire un script qui supprimera tous les commentaires et tout ce qui se trouve entre les fichiers C dans mon répertoire actuel. J'utilise sed
, et voici ce que j'ai jusqu'à présent :
sed -i '/ * [^()] */d' *.c
Cela fonctionne lorsque les commentaires sont sur la même ligne qu'un astérisque ou une barre oblique inverse.
Cependant, cela ne fonctionne pas lorsqu'il y a une ligne commentée sans barre oblique ou astérisque.
Je sais que sed va ligne par ligne, je ne sais tout simplement pas comment lui dire de continuer à supprimer jusqu'à ce qu'il voie un */
.
Réponse acceptée :
Supprimer des commentaires sans utiliser un vrai préprocesseur C n'est pas exactement trivial. Une fois, j'ai trouvé quelque chose comme ça :
perl -0777 -pe'
s{
/*.*?*/
| //[^n]*
| (
"(?:\.|.)*?"
| '''(?:\.)?.*?'''
| ??'''
| .[^'''"/]*
)
}{if ($1eq""){" "}else{$1}}exsg'
Ce qui devrait couvrir la plupart des cas comme :
printf("%c%c%s", '"' /* d-quote */, ''', "/*" "*/");
Voir la discussion intéressante là-bas pour plus de détails.