Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/09/2007, à 16:02

luckyspikes

[sed] : aide pour la création d'un mini script

Bonjour la communauté,

je ne suis malheureusement pas développeur, mais simple utilisateur (et heureux) d'Ubuntu.
venons en au fait :

j'ai un fichier .txt de plusieurs milliers de lignes (source.txt). J'aimerai supprimer toutes les lignes de ce fichier commençant par une expression (chaines de caractères alphanumérique classique). J'ai un second fichier txt (detruire.txt) qui contient la liste de ces expressions (1 seule par ligne).

Virer toutes ces lignes à la main c'est bien mais c'est chiant :

sed -e '/expression/d' source.txt

Est-ce que quelqu'un aurait le talent de me donner un petit script qui me permettrait de simplement indiquer le nom du fichier source, le nom du fichier expression, et qui ferait la commande SED qui va bien ?

D'avance un grand, un immennnnnnse merci ! (j'en ai un peu marre de me farcir ça à la main...)

Hors ligne

#2 Le 04/09/2007, à 18:43

teke

Re : [sed] : aide pour la création d'un mini script

Je te met en exemple un fichier sed (un petit bout) que j'utilise pour nettoyer mon fichier ~/.bash_history.

La première ligne permet de ne pas invoquer sed dans la ligne de commande, tu rend ton fichier sed exécutable par un "chmod +x monfichier.sed" et ensuite tu lance la ligne de commande :

  ./monfihier.sed -i~ source.txt

Le -i demande de travailler directement sur le fichier source ! mais le tilde qui suit demande d'en faire un backup avec justement ce tilde à la fin du nom de fichier (attention cela ne fonctionne qu'une fois... donc faire une sauvegarde manuelle quand même...).

La première ligne stipule que ce fichier, qui est exécutable, doit l'être par sed, l'option -f est celle qui indique un fichier de commande en entrée.

#!/bin/sed -f
/^reset\( ; \)\?.*/d
/^pwd$/d
/^hy .*/d
/^history/d
/^ls \?.*/d
/^make \?.*/d
/^locate .*/d
/^\(sudo \)\?g\?vim\? .*/d
/^cd .*/d
/^exit/d
/^\(man|info\) .*/d
/^l\?ftp .*/d
/^ssh .*/d
/^w3m .*/d
/^sudo su/d
/^su .*/d
/^sux .*/d
/^\(sudo \)\?\(mv\|cp\|rm\) .*/d
/^\(sudo \)\?eject/d
/^vobcopy .*/d
/^\(sudo \)\?u\?mount/d

Voilà. Cela dit, je suis très loin d'être un gourou du sed et je débute à peine en la matière... il y a certainement moyent de faire mieux...