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