« Sed (Stream EDitor) » : différence entre les versions
Page créée avec « La commande <code>sed</code> (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 <code><0xa0></code> ou dans les éditeurs) <br /> dans test.sh et les remplace par des espaces normaux. <sy... » |
Aucun résumé des modifications |
||
| Ligne 9 : | Ligne 9 : | ||
sed -i 's/\xc2\xa0/ /g' test.sh | sed -i 's/\xc2\xa0/ /g' test.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
ou | |||
<syntaxhighlight lang="bash" copy> | |||
sed -i 's/ / /g' test.sh # Collez un vrai espace insécable après 's/' | |||
</syntaxhighlight> | |||
----- | |||
<span id="fonctionnement-de-base"></span> | |||
== '''1. Fonctionnement de base''' == | |||
<code>sed</code> traite un flux de texte ligne par ligne et applique des opérations spécifiées : | |||
<syntaxhighlight lang="bash">sed [options] 'commande' fichier.txt</syntaxhighlight> | |||
<span id="exemple-simple"></span> | |||
=== '''Exemple simple''' : === | |||
<syntaxhighlight lang="bash">sed 's/foo/bar/' fichier.txt # Remplace "foo" par "bar" dans chaque ligne</syntaxhighlight> | |||
----- | |||
<span id="commandes-courantes"></span> | |||
== '''2. Commandes courantes''' == | |||
{| class="wikitable" | |||
|- | |||
! Commande | |||
! Description | |||
|- | |||
| <code>s/recherche/remplacement/</code> | |||
| Substitution (remplace ''recherche'' par ''remplacement'') | |||
|- | |||
| <code>p</code> | |||
| Affiche les lignes (souvent utilisée avec <code>-n</code>) | |||
|- | |||
| <code>d</code> | |||
| Supprime des lignes | |||
|- | |||
| <code>a\text</code> | |||
| Ajoute du texte après une ligne | |||
|- | |||
| <code>i\text</code> | |||
| Insère du texte avant une ligne | |||
|} | |||
----- | |||
<span id="options-principales"></span> | |||
== '''3. Options principales''' == | |||
{| class="wikitable" | |||
|- | |||
! Option | |||
! Effet | |||
|- | |||
| <code>-i</code> | |||
| Modifie le fichier directement (⚠️ ''sans sauvegarde'') | |||
|- | |||
| <code>-i.bak</code> | |||
| Crée une sauvegarde (<code>fichier.txt.bak</code>) avant modification | |||
|- | |||
| <code>-n</code> | |||
| Désactive l’affichage automatique (utilisé avec <code>p</code> pour filtrer) | |||
|- | |||
| <code>-e</code> | |||
| Permet d’ajouter plusieurs commandes (<code>sed -e 's/a/b/' -e 's/c/d/'</code>) | |||
|} | |||
<syntaxhighlight lang="bash" | ----- | ||
sed -i 's/ | |||
</ | <span id="exemples-pratiques"></span> | ||
== '''4. Exemples pratiques''' == | |||
<span id="remplacer-du-texte-substitution"></span> | |||
=== '''Remplacer du texte''' (substitution) === | |||
<syntaxhighlight lang="bash">sed 's/ancien/nouveau/g' fichier.txt # Remplace toutes les occurrences (`g` = global)</syntaxhighlight> | |||
<span id="supprimer-des-lignes"></span> | |||
=== '''Supprimer des lignes''' === | |||
<syntaxhighlight lang="bash">sed '/motif/d' fichier.txt # Supprime les lignes contenant "motif" | |||
sed '3d' fichier.txt # Supprime la 3ème ligne</syntaxhighlight> | |||
<span id="extraire-des-lignes-comme-grep"></span> | |||
=== '''Extraire des lignes''' (comme <code>grep</code>) === | |||
<syntaxhighlight lang="bash">sed -n '/motif/p' fichier.txt # Affiche uniquement les lignes avec "motif"</syntaxhighlight> | |||
<span id="modifier-un-fichier-directement"></span> | |||
=== '''Modifier un fichier directement''' === | |||
<syntaxhighlight lang="bash">sed -i 's/foo/bar/g' fichier.txt # Écrase le fichier (pas de sortie à l'écran)</syntaxhighlight> | |||
<span id="traiter-plusieurs-motifs"></span> | |||
=== '''Traiter plusieurs motifs''' === | |||
<syntaxhighlight lang="bash">sed -e 's/foo/bar/' -e 's/baz/qux/' fichier.txt</syntaxhighlight> | |||
----- | |||
<span id="fonctionnalités-avancées"></span> | |||
== '''5. Fonctionnalités avancées''' == | |||
<span id="utilisation-de-regex"></span> | |||
=== '''Utilisation de regex''' === | |||
<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> | |||
<span id="modification-conditionnelle"></span> | |||
=== '''Modification conditionnelle''' === | |||
<syntaxhighlight lang="bash">sed '/début/,/fin/s/motif/remplacement/' fichier.txt # Remplace entre deux motifs</syntaxhighlight> | |||
<span id="insérerajouter-du-texte"></span> | |||
=== '''Insérer/ajouter du texte''' === | |||
<syntaxhighlight lang="bash">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> | |||
----- | |||
<span id="pièges-courants"></span> | |||
== '''6. Pièges courants''' == | |||
<ul> | |||
<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> | |||
<syntaxhighlight lang="bash">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> | |||
----- | |||
<span id="alternatives"></span> | |||
== '''7. Alternatives''' == | |||
* Pour des modifications complexes, préférez <code>awk</code> ou <code>perl</code>. | |||
* Pour éditer interactivement, utilisez <code>nano</code>/<code>vim</code>/<code>emacs</code>. | |||
----- | |||
<code>sed</code> 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 | |||
[[Catégorie:Linux]] | [[Catégorie:Linux]] | ||