Aller au contenu

Sed (Stream EDitor)

De Marmits Wiki
Version datée du 31 mai 2025 à 17:37 par Geo (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

La commande sed (Stream EDitor) est un outil puissant de manipulation de texte en ligne de commande, disponible sur Unix/Linux et macOS (et via des ports comme Git Bash sur Windows). Voici ce que vous devez savoir :

Exemple

Supprimer espaces insécables La commande recherche tous les espaces insécables (qui apparaissent souvent comme <0xa0> ou dans les éditeurs)
dans test.sh et les remplace par des espaces normaux.

sed -i 's/\xc2\xa0/ /g' test.sh

ou

sed -i 's/ / /g' test.sh  # Collez un vrai espace insécable après 's/'



1. Fonctionnement de base

sed traite un flux de texte ligne par ligne et applique des opérations spécifiées :

sed [options] 'commande' fichier.txt

Exemple simple :

sed 's/foo/bar/' fichier.txt  # Remplace "foo" par "bar" dans chaque ligne

2. Commandes courantes

Commande Description
s/recherche/remplacement/ Substitution (remplace recherche par remplacement)
p Affiche les lignes (souvent utilisée avec -n)
d Supprime des lignes
a\text Ajoute du texte après une ligne
i\text Insère du texte avant une ligne



3. Options principales

Option Effet
-i Modifie le fichier directement (⚠️ sans sauvegarde)
-i.bak Crée une sauvegarde (fichier.txt.bak) avant modification
-n Désactive l’affichage automatique (utilisé avec p pour filtrer)
-e Permet d’ajouter plusieurs commandes (sed -e 's/a/b/' -e 's/c/d/')



4. Exemples pratiques

Remplacer du texte (substitution)

sed 's/ancien/nouveau/g' fichier.txt  # Remplace toutes les occurrences (`g` = global)

Supprimer des lignes

sed '/motif/d' fichier.txt  # Supprime les lignes contenant "motif"
sed '3d' fichier.txt        # Supprime la 3ème ligne

Extraire des lignes (comme grep)

sed -n '/motif/p' fichier.txt  # Affiche uniquement les lignes avec "motif"

Modifier un fichier directement

sed -i 's/foo/bar/g' fichier.txt  # Écrase le fichier (pas de sortie à l'écran)

Traiter plusieurs motifs

sed -e 's/foo/bar/' -e 's/baz/qux/' fichier.txt

5. Fonctionnalités avancées

Utilisation de regex

sed supporte les expressions régulières :

sed 's/^[0-9]*//' fichier.txt  # Supprime les chiffres en début de ligne

Modification conditionnelle

sed '/début/,/fin/s/motif/remplacement/' fichier.txt  # Remplace entre deux motifs

Insérer/ajouter du texte

sed '2i\Ligne ajoutée' fichier.txt  # Insère avant la ligne 2
sed '$a\Fin de fichier' fichier.txt # Ajoute à la dernière ligne

6. Pièges courants

  • -i sans sauvegarde : Peut corrompre le fichier si la commande échoue.

  • Séparateurs / : Si le motif contient /, utilisez un autre séparateur :

    sed 's|/chemin/ancien|/chemin/nouveau|g' fichier.txt
    
  • Espaces et tabulations : Utilisez \t pour les tabs ou \s pour les espaces.



7. Alternatives

  • Pour des modifications complexes, préférez awk ou perl.
  • Pour éditer interactivement, utilisez nano/vim/emacs.



sed est idéal pour : - Nettoyer des fichiers (supprimer des caractères, remplacer du texte) - Automatiser des modifications dans des scripts shell - Filtrer des logs ou des données structurées