ZoneO-trucs pour Mandriva Linux

Effacer les lignes vides avec sed

J'ai des fichiers textes pleins de lignes vides (des retours chariot), comment s'en débarrasser en une seconde?

 
 
Démarrer la Konsole
Figure 1: Démarrer la konsole

Pour les fichiers php ou html que je vais poster sur le net, j'aime bien me débarrasser de toutes les lignes vides qui traînent dans le fichier. D'habitude, ce sont des résidus de fonctions rechercher-remplacer, et malgré tous mes efforts, je n'ai jamais pu trouver une commande qui permette de les retirer depuis un éditeur de texte comme kate, quanta, ou emacs...

Dans ces cas là, sed est votre meilleur ami... Ce programme a été écrit il y a des années pour des systèmes Unix. Depuis, il a été porté sur une multitude de plateformes, dont linux. En gros, c'est un éditeur de texte non-interactif qui s'utilise depuis la console. Son gros avantage: pouvoir réaliser des opérations complexes sur des fichiers textes, sans passer par une interface graphique, sans question à l'utilisateur, et donc sans perte de temps.

Bon, voici la solution à notre problème: ouvrez une konsole (Figure 1), déplacez-vous dans le dossier ou se trouve le fichier à éditer (cd MonDossier), et tapez les deux lignes suivantes

sed '/^$/d' monFichier > tt
mv tt monFichier

Voici ce qui se passe:

  • sed '/^$/d' monFichier retire toutes les lignes vides du fichier monFichier et envoie le résultat dans la console,
  • > tt redirige le résultat de le commande sed dans le fichier tt (ça s'appelle un pipe),
  • mv tt monFichier renomme le fichier tt en monFichier.

Maintenant, il se peut que vous ayez 800 fichiers html à corriger. C'est là qu'intervient la commande foreach... Disons que vous voulez corriger tous les fichiers se terminant par .html, voici ce qu'il faut faire:

  • ouvrir une konsole (Figure 1),
  • déplacez-vous vers le dossier où sont vos fichiers html,
  • tapez les commandes suivantes:
    foreach file (*html)
    sed '/^$/d' $file > tt
    mv tt $file
    end
  • Et voilà, c'est tout!
12/2005
 

Mgzist, 17 juillet 2007

Bonjour,

Une options sed très sympa permet de simplifier tout ça.

foreach file (*html)

sed '/^$/d' $file > tt

mv tt $file

end

rm tt

=

foreach file (*html) ; sed -i '/^$/d' $file ; end

L'option -i remplace le fichier d'entrée en créant une archive si on donne une extension derrière -i

sed -i ".backup" -e "/^$/d' input

=

cp input input.backpup; sed -e 's/^$/d' input.backup > input

Cordialement,

Mgzist

teke, 30 octobre 2007

sans compter que l'option -i de sed permet de travailler directement sur le fichier original, donc pas besoin du >tt & mv tt fichier...

très pratique aussi

Ajouter un commentaire

Nom:
Email ou URL: (optionel)
Security code
Code ci-dessus:
 
 
© ZoneO-soft - Contactez nous - Page d'accueil