Quelques exemples d'utilisation de la commande GNU sed
sed
D'après la page wikipedia, sed est un utilitaire Unix permettant de manipuler du texte.
Exemples
Modifier un fichier
Par exemple, on souhaite remplacer chaque occurence du texte 011.html par xperia_bouygues.html :
-i : mode édition
s : substitution
user@host:~$ sed -i 's/011.html/xperia_bouygues.html/' *.html
Afficher un fichier sans les commentaires
L'expression régulière ^ signifie début de ligne. Donc ici, nous matchons chaque ligne qui commence par le charactère #.
d demande à sed de supprimer chaque ligne qui matche.
user@host:~$ cat myfile | sed '/^#/d'
Afficher un fichier sans lignes vides
L'expression régulière ^ signifie début de ligne, et $ signifie fin de ligne. Donc ^$ matchera avec des lignes vierges.
user@host:~$ cat myfile | sed '/^$/d'
Garger seulement les lignes qui matchent avec un terme précis
-i : mode édition
-n : mode silentieux
p : affiche les éléments qui matchent
user@host:~$ sed -n -i '/vmail/p' /etc/courier/authlib/userdb/system
Supprimer le retour chariot
:a : créer un label a
N : concatene (joue s/\n//g)
$!ba : condition : tant que ce n'est pas la dernière ligne alors revenir au label a.
user@host:~$ cat file | sed ':a;N;$!ba;s/\n//g'
Supprimer la répétitions de lignes vides
N : ajouter la ligne suivante au pattern actuel
s/^\n$// : supprime le retour chariot (remplace le retour chariot par rien)
P : afficher le résultat
D : delete what left to avoid to print next line two times
user@host:~$ cat file | sed 'N;s/^\n$//;P;D'
Mettre en majuscule la première lettre de chaque mot d'un fichier
\b : Le mot boundary \b matches la position (lettre) indiquée.
\b\(.\) : Dans le nom "illusions and witnesses.mp3" cela matchera la première lettre de chaque mot. Donc dans cet exemple cela matchera : illusions and witnesses.mp3
\u\1 : \u mettra en majuscule le prochain caractère. Cela donnera donc : Illusions And Witnesses.Mp3
\b\(.\)\([a-z]* \) : Empèche de matcher le m de mp3. Car ne matchera que les mots séparés par un espace.
user@host $ for i in *mp3; do I=$(echo "$i" | sed -e "s/\b\(.\)\([a-z]* \)/\u\1\2/g" -e "s/ \(.\)\([a-z]*\).mp3/ \u\1\2.mp3/g"); mv "$i" "$I"; done