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' passwdnew: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

