La commande SED permet d’appliquer un certain nombre de commandes sur un fichier puis d’en afficher le resultat (sans modification du fichier de départ) sur la sortie standard.

Principe de fonctionnement

Pour chaque ligne , on applique la commande (si cela est possible) puis on affiche sur la sortie standard la ligne modifiée ou non.

Parcourir un fichier et afficher que certaines lignes :

Affichage des lignes de 10 à 12 :

sed -n '10,12p' passwd
new:x:8:12:news:/etc/news:
ucp:x:13:11:uucp:/var/spool/uucp:/sbin/nologin
operato:x:10:0:operator:/root:/sbin/nologin

Uniquement la première ligne :

sed -n '1p'

Uniquement la dernière ligne :

sed -n '$p'

Changer un mot par un autre dans vi avec sed :

:%s/mot/mot1/g

Si on a besoin de remplacer une chaîne par une autre pour toute une liste de fichiers contenu dans un répertoire, on pourra utiliser ce petit script :

#!/bin/bash
for file in *.sh
do
echo “Traitement de $file …”
sed -e “s/chaine1/chaine2/g” “$file” > “$file”.tmp && mv -f “$file”.tmp “$file”
done

Ce script va afficher la liste de tous les fichiers dont l’extension est .sh et faire le remplacement.

Afficher que les lignes non commentées d’un fichier :

sed -e '/^[ ]*#/d' -e '/^$/d' file.conf
ou
cat fichier.conf | sed -e '/^#.*$/d'

Ajouter un mot ou plus devant chaque ligne d’un fichier :

Exemple, commenter tout un fichier par des #

sed -e 's/.*/# &/' file.sh

Commenter un ligne contenant un mot spécifique :

Exemple, commenter les lignes comprenant localhost

sed -i -e 's/.*localhost.*/#$/g' file.conf