« Sed (Stream EDitor) » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 26 : | Ligne 26 : | ||
=== '''Exemple simple''' : === | === '''Exemple simple''' : === | ||
<syntaxhighlight lang="bash">sed 's/foo/bar/' fichier.txt # Remplace "foo" par "bar" dans chaque ligne</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed 's/foo/bar/' fichier.txt # Remplace "foo" par "bar" dans chaque ligne</syntaxhighlight> | ||
----- | ----- | ||
| Ligne 87 : | Ligne 87 : | ||
=== '''Remplacer du texte''' (substitution) === | === '''Remplacer du texte''' (substitution) === | ||
<syntaxhighlight lang="bash">sed 's/ancien/nouveau/g' fichier.txt # Remplace toutes les occurrences (`g` = global)</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed 's/ancien/nouveau/g' fichier.txt # Remplace toutes les occurrences (`g` = global)</syntaxhighlight> | ||
<span id="supprimer-des-lignes"></span> | <span id="supprimer-des-lignes"></span> | ||
=== '''Supprimer des lignes''' === | === '''Supprimer des lignes''' === | ||
<syntaxhighlight lang="bash">sed '/motif/d' fichier.txt # Supprime les lignes contenant "motif" | <syntaxhighlight lang="bash" copy>sed '/motif/d' fichier.txt # Supprime les lignes contenant "motif" | ||
sed '3d' fichier.txt # Supprime la 3ème ligne</syntaxhighlight> | sed '3d' fichier.txt # Supprime la 3ème ligne</syntaxhighlight> | ||
<span id="extraire-des-lignes-comme-grep"></span> | <span id="extraire-des-lignes-comme-grep"></span> | ||
=== '''Extraire des lignes''' (comme <code>grep</code>) === | === '''Extraire des lignes''' (comme <code>grep</code>) === | ||
<syntaxhighlight lang="bash">sed -n '/motif/p' fichier.txt # Affiche uniquement les lignes avec "motif"</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed -n '/motif/p' fichier.txt # Affiche uniquement les lignes avec "motif"</syntaxhighlight> | ||
<span id="modifier-un-fichier-directement"></span> | <span id="modifier-un-fichier-directement"></span> | ||
=== '''Modifier un fichier directement''' === | === '''Modifier un fichier directement''' === | ||
<syntaxhighlight lang="bash">sed -i 's/foo/bar/g' fichier.txt # Écrase le fichier (pas de sortie à l'écran)</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed -i 's/foo/bar/g' fichier.txt # Écrase le fichier (pas de sortie à l'écran)</syntaxhighlight> | ||
<span id="traiter-plusieurs-motifs"></span> | <span id="traiter-plusieurs-motifs"></span> | ||
=== '''Traiter plusieurs motifs''' === | === '''Traiter plusieurs motifs''' === | ||
<syntaxhighlight lang="bash">sed -e 's/foo/bar/' -e 's/baz/qux/' fichier.txt</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed -e 's/foo/bar/' -e 's/baz/qux/' fichier.txt</syntaxhighlight> | ||
----- | ----- | ||
| Ligne 116 : | Ligne 116 : | ||
<code>sed</code> supporte les expressions régulières : | <code>sed</code> supporte les expressions régulières : | ||
<syntaxhighlight lang="bash">sed 's/^[0-9]*//' fichier.txt # Supprime les chiffres en début de ligne</syntaxhighlight> | <syntaxhighlight lang="bash" copy>sed 's/^[0-9]*//' fichier.txt # Supprime les chiffres en début de ligne</syntaxhighlight> | ||
<span id="modification-conditionnelle"></span> | <span id="modification-conditionnelle"></span> | ||
=== '''Modification conditionnelle''' === | === '''Modification conditionnelle''' === | ||
<syntaxhighlight lang="bash">sed '/début/,/fin/s/motif/remplacement/' fichier.txt # Remplace entre deux motifs</syntaxhighlight> | <syntaxhighlight lang="bash"copy>sed '/début/,/fin/s/motif/remplacement/' fichier.txt # Remplace entre deux motifs</syntaxhighlight> | ||
<span id="insérerajouter-du-texte"></span> | <span id="insérerajouter-du-texte"></span> | ||
=== '''Insérer/ajouter du texte''' === | === '''Insérer/ajouter du texte''' === | ||
<syntaxhighlight lang="bash">sed '2i\Ligne ajoutée' fichier.txt # Insère avant la ligne 2 | <syntaxhighlight lang="bash" copy>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</syntaxhighlight> | sed '$a\Fin de fichier' fichier.txt # Ajoute à la dernière ligne</syntaxhighlight> | ||
| Ligne 135 : | Ligne 135 : | ||
<li><p>'''<code>-i</code> sans sauvegarde''' : Peut corrompre le fichier si la commande échoue.</p></li> | <li><p>'''<code>-i</code> sans sauvegarde''' : Peut corrompre le fichier si la commande échoue.</p></li> | ||
<li><p>'''Séparateurs <code>/</code>''' : Si le motif contient <code>/</code>, utilisez un autre séparateur :</p> | <li><p>'''Séparateurs <code>/</code>''' : Si le motif contient <code>/</code>, utilisez un autre séparateur :</p> | ||
<syntaxhighlight lang="bash">sed 's|/chemin/ancien|/chemin/nouveau|g' fichier.txt</syntaxhighlight></li> | <syntaxhighlight lang="bash" copy>sed 's|/chemin/ancien|/chemin/nouveau|g' fichier.txt</syntaxhighlight></li> | ||
<li><p>'''Espaces et tabulations''' : Utilisez <code>\t</code> pour les tabs ou <code>\s</code> pour les espaces.</p></li></ul> | <li><p>'''Espaces et tabulations''' : Utilisez <code>\t</code> pour les tabs ou <code>\s</code> pour les espaces.</p></li></ul> | ||
Dernière version du 31 mai 2025 à 17:37
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
-isans 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
\tpour les tabs ou\spour les espaces.
7. Alternatives
- Pour des modifications complexes, préférez
awkouperl. - 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