Bonjour 
grep aurait pu aider mais le découpage en lignes casse les pieds.
sed aurait pu aider mais la gourmandise sur une expression rationnelle est un problème.
Il reste awk ou perl.
Une proposition un peu hack-ish, mais logique :
awk 'BEGIN{FS="// @";RS="@ //";OFS=FS;ORS=RS;} {$1="\n";} 1;' | sed '1d;$d;'
On considère la fin de commentaire comme "séparateur de fin d'enregistrement" et le début de commentaire comme "séparateur de champ". Puis on supprime le premier champ. En sortie, on supprime, par sed, la première et la dernière ligne qui sont des "séparateurs" inadéquatement rajoutés.
Exemple de cobaye :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
// @ début du commentaire
// bla
// bla
// fin du commentaire @ //
Ceci est du code
Car ne commençant pas par //
// @ Et ceci est du commentaire
// Ainsi que cette ligne car le commentaire multiligne n'est pas fermé
Ainsi que celle-ci car pas fermé non plus
Et voilà la fin. @ //
Et le code continu... |
Et la commande :
1 2 3 4 5 6 7 8 9
| $ awk 'BEGIN{FS="// @";RS="@ //";OFS=FS;ORS=RS;} {$1="\n";} 1;' fichier.txt | sed '1d;$d;'
// @ début du commentaire
// bla
// bla
// fin du commentaire @ //
// @ Et ceci est du commentaire
// Ainsi que cette ligne car le commentaire multiligne n'est pas fermé
Ainsi que celle-ci car pas fermé non plus
Et voilà la fin. @ // |
Après, si ton code contient la séquence // @ ou @ // protégée par des guillemets, la détection peut devenir rock'n'roll. Car il faudra supprimer d'abord de ton fichier toutes les chaînes de caractères du code protégées par des guillemets.
Partager