GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer tous les commentaires C avec Sed ?

Cette question a déjà des réponses ici :Comment puis-je supprimer tous les caractères sous /* … */ y compris /* &*/?

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


Linux
  1. sed débutant :modification de toutes les occurrences d'un dossier

  2. Utilisation de sed pour diviser une chaîne avec un délimiteur

  3. sed insérer une ligne avec des espaces sur une ligne spécifique

  4. Comment supprimer le caractère \r avec sed

  5. Comment lister tous les utilisateurs avec root ?

Manipulation de texte en ligne de commande avec sed

Utilisation de plusieurs modèles à la fois avec la commande Sed

Ajout avec "sed" ?

Imprimer des commentaires avec un pdf ?

Expression régulière avec sed

sed remplace tous les onglets et espaces par un seul espace