Quand on doit modifier rapidement le contenu de plusieurs fichiers, effectuer des remplacements massifs ou supprimer certaines lignes en fonction d’un motif, sed est l’outil incontournable. Conçu pour l’édition de flux, sed permet de rechercher, remplacer, supprimer ou insérer du texte directement en ligne de commande, sans ouvrir les fichiers manuellement.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Remplacer du texte avec la commande s/ancien/nouveau/
- Supprimer, insérer et modifier des lignes ciblées
- Utiliser des adresses (numéros de ligne, motifs) pour cibler précisément
- Éditer des fichiers en place avec
-i(en sécurité)
La commande sed dans l’écosystème Linux
Section intitulée « La commande sed dans l’écosystème Linux »sed fait partie des commandes de traitement de texte sous Linux. Chaque outil a sa spécialité :
| Commande | Spécialité | Quand l’utiliser |
|---|---|---|
sed | Éditer du texte en flux | Remplacer, supprimer, insérer du texte |
grep | Rechercher des patterns | Filtrer les lignes matchant un motif |
awk | Traiter des données tabulaires | Extraire/transformer des colonnes |
tr | Translitérer des caractères | Remplacer caractère par caractère |
cut | Extraire des colonnes | Découper par délimiteur ou position |
find | Rechercher des fichiers | Trouver des fichiers par attributs |
Combinaisons fréquentes :
# grep + sed : filtrer puis transformergrep "ERROR" log.txt | sed 's/ERROR/ALERTE/g'
# sed + awk : modifier puis extrairesed 's/;/,/g' data.csv | awk -F',' '{print $2}'
# find + sed : modifier plusieurs fichiersfind . -name "*.conf" -exec sed -i 's/old/new/g' {} +Comprendre la commande sed en 2 min
Section intitulée « Comprendre la commande sed en 2 min »🧠 Modèle mental — Comment fonctionne sed
sed = Lire ligne → Appliquer commandes → Afficher résultat
Points clés
- sed lit le fichier ligne par ligne (flux, pas tout en mémoire)
- Chaque ligne passe par les commandes dans l'ordre
- Par défaut, sed affiche le résultat sur stdout (pas de modification du fichier)
- La commande s/ancien/nouveau/ remplace du texte
- Sans flag g, seule la première occurrence par ligne est remplacée
- Avec -i, sed modifie directement le fichier (danger !)
Règles d'or
Vocabulaire essentiel
- s/old/new/
- Substitution : remplace old par new (1ère occurrence)
- s/old/new/g
- Substitution globale (toutes les occurrences)
- d
- Delete : supprime la ligne
- p
- Print : affiche la ligne
- -i
- In-place : modifie le fichier directement
- -n
- No-print : n'affiche rien sauf avec p
📚 Pour aller plus loin — 12 options avancées
- a\texte
- Append : ajoute après la ligne
- i\texte
- Insert : insère avant la ligne
- c\texte
- Change : remplace toute la ligne
- /regex/
- Adresse : cible les lignes matchant regex
- 1,10
- Plage : lignes 1 à 10
- /début/,/fin/
- Plage entre deux patterns
- -E
- Extended regex (ERE) : +, ?, |, () sans escape
- &
- Dans s///, représente le texte matché
- \1, \2
- Backreferences : groupes capturés
- y/abc/xyz/
- Translitération (comme tr)
- q
- Quit : arrête le traitement
- N
- Next : ajoute la ligne suivante au buffer
sed lit le fichier ligne par ligne (flux), applique les transformations demandées, puis affiche le résultat. Par défaut, le fichier original n’est pas modifié.
Syntaxe minimale
Section intitulée « Syntaxe minimale »sed [OPTIONS] 'COMMANDE' [FICHIER]Les 3 parties d’une commande sed
Section intitulée « Les 3 parties d’une commande sed »La commande sed suit une logique simple :
| Étape | Question | Exemples | Obligatoire ? |
|---|---|---|---|
| Entrée | D’où vient le texte ? | fichier.txt, stdin (pipe) | ⚠️ Un des deux |
| Commande | Quelle transformation ? | s/old/new/g, d, p | ✅ Oui |
| Sortie | Où va le résultat ? | stdout (défaut) ou fichier (-i) | ❌ Non (défaut : stdout) |
La commande de substitution s///
Section intitulée « La commande de substitution s/// »La commande la plus utilisée est s (substitution) :
sed 's/ancien/nouveau/' fichier.txt| Élément | Signification |
|---|---|
s | Commande de substitution |
/ | Délimiteur (peut être #, @, |) |
ancien | Texte ou regex à rechercher |
nouveau | Texte de remplacement |
Par défaut, seule la première occurrence par ligne est remplacée. Pour remplacer toutes les occurrences, ajoutez le flag g :
sed 's/foo/bar/g' fichier.txtLes autres commandes principales
Section intitulée « Les autres commandes principales »| Commande | Effet | Exemple |
|---|---|---|
d | Supprime la ligne | /debug/d |
p | Affiche la ligne | -n '/error/p' |
i\texte | Insère avant la ligne | 1i\# En-tête |
a\texte | Ajoute après la ligne | $a\# Fin |
c\texte | Remplace la ligne entière | 3c\Nouvelle ligne |
q | Quitte après cette ligne | 10q |
Les adresses : cibler des lignes spécifiques
Section intitulée « Les adresses : cibler des lignes spécifiques »Par défaut, sed applique la commande à toutes les lignes. On peut cibler avec des adresses :
| Adresse | Ce qu’elle cible | Exemple |
|---|---|---|
5 | Ligne numéro 5 | sed '5d' f.txt |
$ | Dernière ligne | sed '$d' f.txt |
/pattern/ | Lignes contenant “pattern” | sed '/error/d' f.txt |
1,10 | Lignes 1 à 10 | sed '1,10d' f.txt |
/début/,/fin/ | Plage entre deux patterns | sed '/BEGIN/,/END/d' f.txt |
Les flags de substitution
Section intitulée « Les flags de substitution »| Flag | Effet | Exemple |
|---|---|---|
g | Global (toutes occurrences) | s/a/b/g |
i | Insensible à la casse | s/error/warning/gi |
p | Affiche si substitution faite | -n 's/a/b/p' |
2 | Remplace la 2ème occurrence | s/a/b/2 |
Les délimiteurs alternatifs
Section intitulée « Les délimiteurs alternatifs »Quand le texte contient des /, utilisez un autre délimiteur :
# ❌ Illisible et source d'erreurssed 's/\/var\/log/\/opt\/logs/g' fichier.txt
# ✅ Beaucoup plus clair avec #sed 's#/var/log#/opt/logs#g' fichier.txtL’édition en place avec -i
Section intitulée « L’édition en place avec -i »Par défaut, sed affiche le résultat sur stdout sans modifier le fichier. Pour modifier directement :
# ⚠️ Modifie le fichier (DANGER si erreur)sed -i 's/old/new/g' fichier.txt
# ✅ Crée un backup avant modificationsed -i.bak 's/old/new/g' fichier.txtRègle d’or : toujours tester sans -i d’abord !
# 1. Testersed 's/old/new/g' fichier.txt
# 2. Vérifier le résultat, puis seulement :sed -i.bak 's/old/new/g' fichier.txtErreurs typiques (et solutions)
Section intitulée « Erreurs typiques (et solutions) »| Erreur | Cause | Solution |
|---|---|---|
| Seule la 1ère occurrence est remplacée | Oubli du flag g | Ajouter g : s/old/new/g |
| Erreur de syntaxe avec des chemins | / dans le texte | Utiliser # comme délimiteur |
| Fichier modifié par erreur | -i sans test préalable | Toujours tester sans -i d’abord |
| Rien ne se passe | Pas de match (casse ?) | Vérifier avec grep ou utiliser i (insensible) |
Les Modèles de substitution courants
Section intitulée « Les Modèles de substitution courants »Maintenant que vous comprenez la logique de sed, voici des modèles courants
pour des traitements fréquents.
Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.
Substitution simple Base Remplacer la première occurrence d'un texte sur chaque ligne.
sed 's/erreur/warning/' log.txt
sed 's/ancien/nouveau/' <fichier> sed 's/erreur/warning/' log.txt -
ancien— Texte ou regex à rechercher -
nouveau— Texte de remplacement
Substitution globale Base Remplacer toutes les occurrences d'un texte sur chaque ligne.
sed 's/foo/bar/g' fichier.txt
sed 's/ancien/nouveau/g' <fichier> sed 's/foo/bar/g' fichier.txt -
g— Flag global : toutes les occurrences
Substitution insensible à la casse Base Remplacer un texte quelle que soit la casse.
sed 's/error/warning/gi' log.txt
sed 's/ancien/nouveau/gi' <fichier> sed 's/error/warning/gi' log.txt -
i— Flag insensible à la casse (GNU sed)
Délimiteur alternatif Base Éviter les échappements quand le texte contient des /.
sed 's#/var/log#/opt/logs#g' paths.txt
sed 's#ancien#nouveau#g' <fichier> sed 's#/var/log#/opt/logs#g' paths.txt -
#— Délimiteur alternatif (#, @, |, etc.)
Supprimer lignes par motif Base Supprimer les lignes contenant un motif.
sed '/DEBUG/d' log.txt
sed '/motif/d' <fichier> sed '/DEBUG/d' log.txt -
motif— Pattern regex à matcher -
d— Commande delete
Supprimer lignes vides Base Nettoyer un fichier en supprimant les lignes vides.
sed '/^$/d' texte.txt
sed '/^$/d' <fichier> sed '/^$/d' texte.txt -
^$— Regex : début = fin (ligne vide)
Cibler par numéro de ligne Inter. Appliquer une commande uniquement sur une ligne spécifique.
sed '5d' fichier.txt # supprime ligne 5
sed 'N<commande>' <fichier> sed '5d' fichier.txt # supprime ligne 5 -
N— Numéro de ligne
Plage de lignes Inter. Appliquer une commande sur un ensemble de lignes.
sed '2,5d' fichier.txt # supprime lignes 2 à 5
sed 'N,M<commande>' <fichier> sed '2,5d' fichier.txt # supprime lignes 2 à 5 -
N,M— De la ligne N à M incluses
Plage entre deux motifs Inter. Cibler les lignes entre deux patterns.
sed '/BEGIN/,/END/d' fichier.txt
sed '/début/,/fin/<commande>' <fichier> sed '/BEGIN/,/END/d' fichier.txt -
/début/— Pattern de début de plage -
/fin/— Pattern de fin de plage
Édition en place Inter. Modifier un fichier directement.
sed -i 's/old/new/g' config.conf
sed -i '<commande>' <fichier> sed -i 's/old/new/g' config.conf -
-i— In-place : modifie le fichier
Édition en place avec backup Base Modifier un fichier en gardant une sauvegarde.
sed -i.bak 's/old/new/g' config.conf
sed -i.bak '<commande>' <fichier> sed -i.bak 's/old/new/g' config.conf -
-i.bak— Crée fichier.bak avant modification
Insérer une ligne Inter. Ajouter du texte avant une ligne.
sed '1i\# En-tête ajouté' fichier.txt
sed '<adresse>i\<texte>' <fichier> sed '1i\# En-tête ajouté' fichier.txt -
i\— Insert : ajoute avant la ligne
Ajouter après une ligne Inter. Ajouter du texte après une ligne.
sed '/END/a\# Commentaire' fichier.txt
sed '<adresse>a\<texte>' <fichier> sed '/END/a\# Commentaire' fichier.txt -
a\— Append : ajoute après la ligne
Afficher seulement les lignes matchées Inter. Extraire les lignes correspondant à un motif (comme grep).
sed -n '/ERROR/p' log.txt
sed -n '/motif/p' <fichier> sed -n '/ERROR/p' log.txt -
-n— Supprime l'affichage auto -
p— Print : affiche la ligne
Références arrière (groupes) Avancé Réutiliser des parties capturées dans le remplacement.
sed 's/\([0-9]*\)/ID:\1/' fichier.txt
sed 's/\(motif\)/\1 ajout/' <fichier> sed 's/\([0-9]*\)/ID:\1/' fichier.txt -
\(\)— Groupe de capture -
\1— Référence au 1er groupe
Utiliser le texte matché (&) Inter. Insérer le texte matché dans le remplacement.
sed 's/[0-9]\+/(&)/g' fichier.txt
sed 's/motif/[&]/g' <fichier> sed 's/[0-9]\+/(&)/g' fichier.txt -
&— Représente le texte matché entier
Aucune recette ne correspond à votre recherche.
Les Pièges à éviter
Section intitulée « Les Pièges à éviter »Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.
Édition -i sans prévisualisation sed -i 's/important/supprimé/g' fichier.conf exécuté directement
Danger
sed -i 's/important/supprimé/g' fichier.conf exécuté directement
sed 's/old/new/g' fichier # tester d'abord, puis sed -i.bak Oubli du flag g sed 's/foo/bar/' ne remplace que la première occurrence par ligne
Attention
sed 's/foo/bar/' ne remplace que la première occurrence par ligne
sed 's/foo/bar/g' fichier.txt Slash dans le texte à remplacer sed 's//var/log//opt/logs/' provoque une erreur de syntaxe
Attention
sed 's//var/log//opt/logs/' provoque une erreur de syntaxe
sed 's#/var/log#/opt/logs#g' fichier.txt Caractères spéciaux regex non échappés sed 's/fichier.txt/fichier.log/' matche aussi "fichierXtxt"
Attention
sed 's/fichier.txt/fichier.log/' matche aussi "fichierXtxt"
sed 's/fichier\.txt/fichier.log/g' fichier Regex gourmande (.* trop large) sed 's/<.*>//g' supprime tout entre le premier < et le dernier >
Attention
sed 's/<.*>//g' supprime tout entre le premier < et le dernier >
sed 's/<[^>]*>//g' fichier Incompatibilité -i entre GNU et BSD sed sed -i 's/old/new/' fichier fonctionne sur Linux mais pas sur macOS
Info
sed -i 's/old/new/' fichier fonctionne sur Linux mais pas sur macOS
sed -i '' 's/old/new/' fichier # macOS Insertion de nouvelle ligne dans le remplacement sed 's/$/\n/' n'ajoute pas de vraie nouvelle ligne
Info
sed 's/$/\n/' n'ajoute pas de vraie nouvelle ligne
sed 's/$/\
/' fichier # ou avec $'...' Cheatsheet
Section intitulée « Cheatsheet » 📋
Cheatsheet sed
📝 Syntaxe :
sed 'cmd' fichier Applique cmd au fichier sed -e 'cmd1' -e 'cmd2' Plusieurs commandes cmd | sed 'cmd' Depuis un pipe 🚀 Commandes types :
sed 's/erreur/warning/' log.txt sed 's/foo/bar/g' fichier.txt sed 's/error/warning/gi' log.txt sed 's#/var/log#/opt/logs#g' paths.txt sed '/DEBUG/d' log.txt ⚙️ Options
-i | Édition en place (modifie le fichier) | sed -i 's/a/b/' f.txt |
-i.bak | Édition en place avec backup | sed -i.bak 's/a/b/' f.txt |
-n | Mode silencieux (n'affiche rien par défaut) | sed -n '/err/p' f.txt |
-E ou -r | Regex étendu (ERE) | sed -E 's/[0-9]+/X/g' |
-e | Spécifie une commande (pour en chaîner) | sed -e 's/a/b/' -e 's/c/d/' |
-f script.sed | Lit les commandes depuis un fichier | sed -f cmds.sed fichier |
🔗 Composition
s#old#new# | Délimiteur # (pour les chemins) | s#/var#/opt#g |
s@old@new@ | Délimiteur @ | s@http://@https://@g |
s|old|new| | Délimiteur | | s|foo|bar|g |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Conclusion
Section intitulée « Conclusion »La commande sed est un outil essentiel pour quiconque travaille
régulièrement en ligne de commande. Grâce à sa syntaxe concise et sa capacité à
traiter des flux de texte, elle permet de modifier, nettoyer et transformer
du contenu rapidement et efficacement. Que ce soit pour un remplacement
ponctuel, un nettoyage de logs ou une modification en masse de fichiers de
configuration, la maîtrise de sed fait gagner un temps précieux.
FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »Principe de fonctionnement
Sed lit le texte ligne par ligne, applique des transformations, et affiche le résultat. Par défaut, le fichier original reste inchangé (sauf-i).Commandes principales
| Commande | Action | Syntaxe | Exemple |
|---|---|---|---|
s |
Substitution | s/ancien/nouveau/ |
sed 's/foo/bar/' file.txt |
d |
Delete (suppression) | [adresse]d |
sed '3d' file.txt |
i |
Insert (avant ligne) | [adresse]i\\texte |
sed '1i\\Header' file.txt |
a |
Append (après ligne) | [adresse]a\\texte |
sed '5a\\Footer' file.txt |
c |
Change (remplacer ligne) | [adresse]c\\texte |
sed '2c\\New' file.txt |
p |
Print (afficher) | [adresse]p |
sed -n '/error/p' file.txt |
sed vs Éditeurs classiques
| Critère | sed | vim/nano | Avantage |
|---|---|---|---|
| Interaction | Non-interactif | Interactif | sed = automatisation |
| Traitement | Flux (stdin/stdout) | Fichier en mémoire | sed = pipelines |
| Volume | Fichiers GB+ | Limité RAM | sed = gros fichiers |
| Automatisation | Scripts shell | Macros limitées | sed = CI/CD |
Cas d'usage quotidiens
# Config : remplacer paramètre
sed 's/DEBUG/INFO/' app.conf
# Logs : supprimer lignes vides
sed '/^$/d' app.log
# CSV : remplacer séparateur
sed 's/;/,/g' data.csv
# Scripts : mettre à jour chemins
sed 's/\/old\/path/\/new\/path/' deploy.sh
# HTML : injection contenu
sed '/<body>/a\\<script src="analytics.js"></script>' index.html
Pourquoi sed est essentiel
Usages principaux
sed permet de transformer du texte automatiquement sans éditeur interactif, directement dans le terminal ou dans des scripts.Scénarios DevOps/SysAdmin
| Contexte | Opération | Commande sed |
|---|---|---|
| Configuration | Changer port dans config | sed 's/port: 8080/port: 9090/' app.yaml |
| Logs | Supprimer lignes vides | sed '/^$/d' app.log |
| Déploiement | Mise à jour chemins | sed 's/\/old\/path/\/new\/path/g' script.sh |
| Data | Convertir CSV | sed 's/;/,/g' export.csv |
| Templating | Injection variables | sed 's/{{VERSION}}/1.2.3/' deploy.yaml |
Exemples concrets
# Mise à jour automatique version dans package.json
sed -i 's/"version": "1.0.0"/"version": "1.1.0"/' package.json
# Nettoyage logs (supprimer DEBUG)
sed '/DEBUG/d' app.log > clean.log
# Modification masse configs Nginx
find /etc/nginx -name '*.conf' -exec sed -i 's/80/8080/' {} \;
# Génération rapport : remplacer placeholder
sed 's/{{DATE}}/2026-01-08/' template.html > report.html
Pourquoi sed plutôt qu'un éditeur ?
- Automatisation : intégrable dans scripts CI/CD
- Performance : traite fichiers de plusieurs Go
- Pipelines : utilisable avec
|(grep, awk, sort...) - Non-interactif : pas besoin d'ouvrir le fichier
Structure générale
sed [OPTIONS] 'COMMANDE' [FICHIER]
Ou avec pipe :commande | sed 'COMMANDE'
Options principales
| Option | Effet | Exemple |
|---|---|---|
-n |
Mode silencieux (pas d'affichage auto) | sed -n '/error/p' log.txt |
-e |
Commande multiple | sed -e 's/foo/bar/' -e 's/baz/qux/' |
-i |
Édition en place (modifie fichier) | sed -i 's/old/new/' file.txt |
-i.bak |
Édition + backup | sed -i.bak 's/old/new/' file.txt |
-f |
Script sed externe | sed -f commands.sed file.txt |
Commandes fondamentales
| Commande | Action | Syntaxe |
|---|---|---|
s |
Substitution | s/ancien/nouveau/[flags] |
d |
Delete (suppression ligne) | [adresse]d |
p |
Print (affichage) | [adresse]p |
i |
Insert (avant ligne) | [adresse]i\\texte |
a |
Append (après ligne) | [adresse]a\\texte |
c |
Change (remplacement ligne) | [adresse]c\\texte |
Exemples de syntaxe
# Substitution simple
sed 's/error/warning/' log.txt
# Plusieurs commandes (-e)
sed -e 's/foo/bar/' -e 's/hello/hi/' file.txt
# Avec adresse (ligne 3)
sed '3d' file.txt
# Avec pattern (lignes contenant "error")
sed '/error/d' log.txt
# Édition en place + backup
sed -i.backup 's/DEBUG/INFO/' config.ini
Structure complète
sed [adresse][commande][options] fichier
# | | |
# | | +-> g (global), i (insensible casse)...
# | +-----------> s, d, p, i, a, c...
# +---------------------> numéro ligne, pattern /.../, plage 1,5
Syntaxe substitution
sed 's/ANCIEN/NOUVEAU/' fichier.txt
Important : Par défaut, remplace seulement la première occurrence par ligne.Exemples basiques
# Remplacer "error" par "warning"
sed 's/error/warning/' app.log
# Remplacer chemin
sed 's/\/usr\/local/\/opt/' config.sh
# Changer extension fichier
sed 's/\.txt/.md/' liste.txt
# Mettre à jour variable
sed 's/PORT=8080/PORT=9090/' .env
Comportement ligne par ligne
# Fichier source
cat exemple.txt
error: failed error
warning: ok
error: timeout
# Substitution (1ère occurrence seulement)
sed 's/error/ERREUR/' exemple.txt
ERREUR: failed error # Seulement 1er "error" remplacé
warning: ok
ERREUR: timeout
Modification en mémoire vs fichier
# Affichage seulement (fichier inchangé)
sed 's/foo/bar/' file.txt
# Redirection vers nouveau fichier
sed 's/foo/bar/' file.txt > output.txt
# Modification directe (avec -i)
sed -i 's/foo/bar/' file.txt
Cas d'usage courants
# CI/CD : mise à jour version
sed 's/v1.0.0/v1.1.0/' README.md
# Logs : masquer IP
sed 's/192\.168\.1\.10/XXX.XXX.X.XX/' access.log
# Config : changer domaine
sed 's/localhost/production.example.com/' app.yaml
Astuce : Pour remplacer toutes les occurrences, utiliser le flag g : sed 's/error/warning/g'.Flag g (global)
sed 's/ANCIEN/NOUVEAU/g' fichier.txt
# |
# +-> g = TOUTES occurrences par ligne
Comparaison sans/avec g
# Fichier test
cat data.txt
foo bar foo baz foo
error error error
# SANS g (1ère occurrence seulement)
sed 's/foo/FOO/' data.txt
FOO bar foo baz foo # Seulement 1er foo
error error error
# AVEC g (toutes occurrences)
sed 's/foo/FOO/g' data.txt
FOO bar FOO baz FOO # Tous les foo
error error error
Cas d'usage pratiques
# CSV : remplacer tous les séparateurs
sed 's/;/,/g' export.csv
# Logs : masquer toutes les IP
sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/XXX.XXX.X.XX/g' access.log
# HTML : remplacer toutes les occurrences de classe
sed 's/class="old"/class="new"/g' index.html
# Config : mettre à jour tous les ports
sed 's/:8080/:9090/g' services.yaml
Autres flags combinables
| Flag | Effet | Exemple |
|---|---|---|
g |
Global (toutes occurrences) | s/foo/bar/g |
i |
Insensible casse | s/error/warning/gi |
2 |
Seulement 2ème occurrence | s/foo/bar/2 |
p |
Print si modifié (avec -n) | sed -n 's/old/new/gp' |
Exemple combinaison flags
# Remplacer tous "error" (insensible casse) et afficher
sed -n 's/error/WARNING/gip' app.log
# Seulement 2ème occurrence de chaque ligne
sed 's/foo/bar/2' file.txt
Règle : Sans g, sed s'arrête à la 1ère occurrence. Avec g, parcourt toute la ligne.Commande d (delete)
sed 'NUMEROd' fichier.txt
NUMERO = numéro de ligne à supprimer (1 = première ligne).Exemples suppression ligne
# Supprimer ligne 3
sed '3d' file.txt
# Supprimer ligne 1 (en-tête)
sed '1d' data.csv
# Supprimer dernière ligne ($)
sed '$d' file.txt
# Supprimer ligne 5 à 10
sed '5,10d' file.txt
Plages de lignes
| Syntaxe | Effet | Exemple |
|---|---|---|
3d |
Ligne 3 | sed '3d' file.txt |
1d |
Première ligne | sed '1d' file.txt |
$d |
Dernière ligne | sed '$d' file.txt |
2,5d |
Lignes 2 à 5 | sed '2,5d' file.txt |
1,3d |
Lignes 1 à 3 | sed '1,3d' file.txt |
5,$d |
Ligne 5 à la fin | sed '5,$d' file.txt |
Cas pratiques
# CSV : supprimer en-tête
sed '1d' export.csv > data.csv
# Logs : garder seulement 100 premières lignes
sed '101,$d' app.log
# Fichier config : supprimer ligne commentaire (ligne 2)
sed '2d' app.conf
# Supprimer 10 premières lignes
sed '1,10d' file.txt
Vérification avant suppression
# Afficher SEULEMENT ligne à supprimer
sed -n '3p' file.txt # Vérifier ligne 3
# Puis supprimer
sed '3d' file.txt
# Ou directement avec -i + backup
sed -i.bak '3d' file.txt
Différence : d supprime ligne(s), p affiche ligne(s), s modifie contenu.Syntaxe pattern delete
sed '/PATTERN/d' fichier.txt
Supprime toutes les lignes contenant le motif.Exemples courants
# Supprimer lignes contenant "error"
sed '/error/d' app.log
# Supprimer commentaires (commençant par #)
sed '/^#/d' config.sh
# Supprimer lignes vides
sed '/^$/d' file.txt
# Supprimer lignes avec IP spécifique
sed '/192\.168\.1\.10/d' access.log
Patterns utiles
| Pattern | Signification | Exemple |
|---|---|---|
/error/d |
Contient "error" | sed '/error/d' log.txt |
/^#/d |
Commence par # | sed '/^#/d' script.sh |
/^$/d |
Lignes vides | sed '/^$/d' file.txt |
/TODO/d |
Contient TODO | sed '/TODO/d' code.js |
/^\s*$/d |
Vides + espaces | sed '/^\s*$/d' file.txt |
/DEBUG/d |
Niveau DEBUG | sed '/DEBUG/d' app.log |
Nettoyage logs production
# Supprimer DEBUG + INFO (garder WARN/ERROR)
sed -e '/DEBUG/d' -e '/INFO/d' app.log > critical.log
# Supprimer lignes avec IP privées
sed '/192\.168/d' access.log
# Nettoyer fichier config (commentaires + vides)
sed -e '/^#/d' -e '/^$/d' nginx.conf
Inversion (supprimer ce qui NE contient PAS)
# Garder SEULEMENT lignes avec "error"
sed '/error/!d' app.log
# |
# +-> ! = NOT (inverse)
# Supprimer tout SAUF commentaires
sed '/^#/!d' script.sh
Cas DevOps
# CI/CD : filtrer logs
sed '/^\[INFO\]/d' build.log > errors-only.log
# Monitoring : supprimer checks santé
sed '/healthcheck/d' access.log
# Sécurité : anonymiser données sensibles
sed -e '/password/d' -e '/token/d' dump.log
Astuce : Tester avec -n '/pattern/p' avant de supprimer avec /pattern/d.Commande i (insert)
sed 'ADRESSEi\TEXTE' fichier.txt
Insère TEXTE avant la ligne ciblée.Exemples numéro de ligne
# Insérer avant ligne 1 (en-tête)
sed '1i\# Header' file.txt
# Insérer avant ligne 5
sed '5i\--- Section ---' doc.md
# Insérer avant dernière ligne
sed '$i\Footer' file.txt
Syntaxe alternative (POSIX vs GNU)
# GNU sed (Linux) : backslash simple
sed '1i\Header' file.txt
# POSIX sed (macOS/BSD) : newline requis
sed '1i\
Header' file.txt
# Portable (fonctionne partout)
sed -e '1i\' -e 'Header' file.txt
Insertion par pattern
# Insérer avant première ligne contenant "[database]"
sed '/^\[database\]/i\# Configuration database' config.ini
# Insérer avant chaque ligne "error"
sed '/error/i\--- Error detected ---' app.log
# Insérer commentaire avant fonction main
sed '/^def main/i\# Entry point' script.py
Cas d'usage pratiques
# Ajouter shebang au début d'un script
sed '1i\#!/bin/bash' script.sh
# Insérer en-tête CSV
sed '1i\Name,Email,Age' data.csv
# Ajouter DOCTYPE HTML
sed '1i\<!DOCTYPE html>' page.html
# Insérer import dans Python
sed '1i\import logging' app.py
Multi-lignes
# Insérer plusieurs lignes (GNU sed)
sed '1i\Line 1\nLine 2\nLine 3' file.txt
# Ou avec plusieurs commandes
sed -e '1i\Line 1' -e '1i\Line 2' file.txt
Modification en place
# Insérer + sauvegarder
sed -i '1i\# Auto-generated' config.yaml
# Avec backup
sed -i.bak '1i\#!/usr/bin/env python3' script.py
Différence : i insère avant, a insère après.Commande a (append)
sed 'ADRESSEa\TEXTE' fichier.txt
Ajoute TEXTE après la ligne ciblée.Exemples par numéro
# Ajouter après ligne 3
sed '3a\New line after 3' file.txt
# Ajouter à la fin ($)
sed '$a\Footer line' file.txt
# Ajouter après ligne 1
sed '1a\Second line' file.txt
Par pattern (motif)
# Après chaque ligne contenant "[section]"
sed '/^\[section\]/a\key=value' config.ini
# Après balise <head>
sed '/<head>/a\ <meta charset="UTF-8">' index.html
# Après import logging
sed '/^import logging/a\import sys' app.py
Cas d'usage DevOps
# Injecter analytics après <body>
sed '/<body>/a\<script src="analytics.js"></script>' index.html
# Ajouter route après section routes
sed '/# Routes/a\app.get("/health", healthCheck)' server.js
# Ajouter variable après environnement
sed '/^\[production\]/a\DEBUG=False' .env
# Footer dans README
sed '$a\\n## License\nMIT' README.md
Multi-lignes
# Ajouter plusieurs lignes (GNU sed)
sed '5a\Line A\nLine B\nLine C' file.txt
# Avec -e
sed -e '5a\Line A' -e '5a\Line B' file.txt
Insertion conditionnelle
# Ajouter seulement après première occurrence
sed '0,/pattern/a\New line' file.txt
# Ajouter si pattern trouvé
sed '/TODO/a\# FIXME: urgent' code.js
Différence i vs a
| Commande | Position | Exemple |
|---|---|---|
i |
Avant ligne | sed '3i\Before 3' file.txt |
a |
Après ligne | sed '3a\After 3' file.txt |
# Fichier original
Line 1
Line 2
Line 3
# Avec i (insert avant)
sed '2i\NEW' file
Line 1
NEW
Line 2
Line 3
# Avec a (append après)
sed '2a\NEW' file
Line 1
Line 2
NEW
Line 3
Astuce : Utiliser -n et p pour tester avant modification : sed -n '3p' file.txt.Commande c (change)
sed 'ADRESSEc\NOUVEAU_CONTENU' fichier.txt
Remplace entièrement la ligne (supprime ancien contenu).Exemples par numéro
# Remplacer ligne 5
sed '5c\New content for line 5' file.txt
# Remplacer ligne 1 (header)
sed '1c\# New Title' README.md
# Remplacer dernière ligne
sed '$c\End of file' file.txt
Par pattern
# Remplacer ligne contenant "DEBUG"
sed '/DEBUG=true/c\DEBUG=false' config.sh
# Remplacer ligne de version
sed '/^version=/c\version=2.0.0' package.conf
# Remplacer ligne import obsolète
sed '/^import old_module/c\import new_module' script.py
Différence s vs c
| Commande | Action | Exemple | Résultat |
|---|---|---|---|
s |
Substitution partielle | sed 's/foo/bar/' |
Garde le reste de la ligne |
c |
Remplacement total | sed '2c\NEW' |
Ligne complètement remplacée |
# Fichier
cat file.txt
Line 1 with foo
Line 2 with foo
Line 3
# Avec s (substitution)
sed '2s/foo/bar/' file.txt
Line 1 with foo
Line 2 with bar # "Line 2 with" conservé
Line 3
# Avec c (change)
sed '2c\bar' file.txt
Line 1 with foo
bar # Tout remplacé
Line 3
Cas pratiques
# Config : remplacer ligne port
sed '/^port=/c\port=9090' app.conf
# Mise à jour variable environnement
sed '/^export PATH=/c\export PATH=/usr/local/bin:$PATH' .bashrc
# Dockerfile : nouvelle base image
sed '/^FROM/c\FROM node:18-alpine' Dockerfile
# Makefile : nouvelle commande
sed '/^build:/c\build: clean compile' Makefile
Plages de lignes
# Remplacer lignes 2 à 4 par une seule
sed '2,4c\Single replacement line' file.txt
# Remplacer tout sauf ligne 1
sed '2,$c\All replaced' file.txt
Modification en place
# Remplacer + sauvegarder
sed -i '/old_value/c\new_value' config.yaml
# Avec backup
sed -i.bak '5c\Updated line' file.txt
Résumé : c = remplacement complet de ligne, s = modification partielle.Option -i (in-place)
sed -i 'COMMANDE' fichier.txt
Effet : Modifie le fichier directement (pas de redirection nécessaire).Comportement par défaut vs -i
# SANS -i : affichage stdout (fichier inchangé)
sed 's/foo/bar/g' file.txt
# Affiche résultat, file.txt intact
# Redirection manuelle
sed 's/foo/bar/g' file.txt > output.txt
# file.txt intact, résultat dans output.txt
# AVEC -i : modification directe
sed -i 's/foo/bar/g' file.txt
# file.txt modifié, pas de sortie stdout
Différences Linux (GNU) vs macOS (BSD)
| Système | Syntaxe | Obligatoire |
|---|---|---|
| Linux | sed -i 's/foo/bar/' file.txt |
Extension optionnelle |
| macOS | sed -i '' 's/foo/bar/' file.txt |
Extension requise (vide = '') |
# Linux/GNU sed
sed -i 's/old/new/' file.txt
# macOS/BSD sed (ERREUR sans '')
sed -i 's/old/new/' file.txt # ❌ ERREUR
sed -i '' 's/old/new/' file.txt # ✅ OK
# Portable (fonctionne partout)
sed -i.bak 's/old/new/' file.txt
Cas d'usage DevOps
# CI/CD : mise à jour version
sed -i 's/version: 1.0.0/version: 1.1.0/' Chart.yaml
# Déploiement : changement environnement
sed -i 's/NODE_ENV=development/NODE_ENV=production/' .env
# Config serveur : mise à jour port
sed -i 's/listen 80/listen 8080/' nginx.conf
# Ansible : templating dynamique
sed -i 's/{{DB_HOST}}/postgres.local/' config.php
Modification masse
# Tous les fichiers .conf
find /etc/app -name '*.conf' -exec sed -i 's/old/new/g' {} \;
# Tous les .js du projet
find src -name '*.js' -exec sed -i 's/var /let /g' {} +
# Avec confirmation
find . -name '*.txt' -exec sed -i.bak 's/foo/bar/g' {} \;
Sécurité
# ⚠️ DANGER : sans backup
sed -i 's/important/data/' critical.conf
# ✅ RECOMMANDÉ : avec backup
sed -i.bak 's/important/data/' critical.conf
# Crée critical.conf.bak
# Test avant (-n pour dry-run visuel)
sed -n 's/old/new/gp' file.txt # Voir changements
sed -i 's/old/new/g' file.txt # Appliquer
Bonne pratique : Toujours utiliser -i.bak en production, ou tester sans -i d'abord.Option -i.EXTENSION
sed -i.EXTENSION 'COMMANDE' fichier.txt
Crée fichier.txt.EXTENSION (backup) avant modification.Exemples extensions courantes
# Extension .bak
sed -i.bak 's/old/new/g' config.txt
# Crée config.txt.bak
# Extension .orig
sed -i.orig 's/foo/bar/' script.sh
# Crée script.sh.orig
# Extension datée
sed -i.$(date +%Y%m%d) 's/old/new/' file.txt
# Crée file.txt.20260108
# Extension timestamp
sed -i.$(date +%s) 's/old/new/' data.csv
# Crée data.csv.1704729600
Workflow sécurisé
# 1. Vérifier changement (dry-run)
sed -n 's/DEBUG/INFO/gp' app.conf
# 2. Appliquer avec backup
sed -i.backup 's/DEBUG/INFO/g' app.conf
# 3. Vérifier résultat
diff app.conf.backup app.conf
# 4. Si OK, supprimer backup
rm app.conf.backup
# 5. Si KO, restaurer
mv app.conf.backup app.conf
Comparaison options
| Option | Backup | Fichier original | Usage |
|---|---|---|---|
sed 's/...' file |
❌ Non | ✅ Intact | Test/affichage |
sed -i 's/...' file |
❌ Non | ❌ Modifié | Risqué |
sed -i.bak 's/...' file |
✅ Oui | ❌ Modifié | Recommandé |
Cas pratiques production
# Déploiement avec backup horodaté
sed -i.$(date +%Y%m%d-%H%M%S) \
's/version=1.0/version=2.0/' /etc/app/config.ini
# Mise à jour configs multiples
for conf in /etc/nginx/sites-enabled/*; do
sed -i.backup 's/listen 80/listen 8080/' "$conf"
done
# Rollback si problème
find /etc/nginx/sites-enabled -name '*.backup' | while read bak; do
mv "$bak" "${bak%.backup}"
done
Nettoyage backups
# Supprimer tous les .bak
find . -name '*.bak' -delete
# Garder backups < 7 jours
find . -name '*.bak' -mtime +7 -delete
# Lister backups avant suppression
find . -name '*.bak' -ls
Différence macOS
# macOS : extension OBLIGATOIRE (même vide)
sed -i '' 's/old/new/' file.txt # Pas de backup
sed -i '.bak' 's/old/new/' file.txt # Avec backup
# Linux : extension optionnelle
sed -i 's/old/new/' file.txt # Pas de backup
sed -i.bak 's/old/new/' file.txt # Avec backup
Règle d'or : Toujours utiliser -i.bak sur fichiers critiques (configs, code source).Support regex intégré
Oui, sed utilise des expressions régulières (ERE/BRE) pour patterns complexes.Syntaxes disponibles
| Mode | Activation | Support |
|---|---|---|
| BRE | Par défaut | Basic Regular Expressions |
| ERE | -E ou -r |
Extended Regular Expressions |
# BRE (par défaut)
sed 's/[0-9]\+/NUM/g' file.txt
# ERE (plus lisible)
sed -E 's/[0-9]+/NUM/g' file.txt
Patterns courants
| Pattern | Signification | Exemple |
|---|---|---|
^ |
Début de ligne | sed 's/^/PREFIX/' file.txt |
$ |
Fin de ligne | sed 's/$/SUFFIX/' file.txt |
. |
N'importe quel caractère | sed 's/a.c/ABC/' file.txt |
* |
0 ou + occurrences | sed 's/a*/X/' file.txt |
[0-9] |
Chiffre | sed 's/[0-9]/#/g' file.txt |
[a-z] |
Lettre minuscule | sed 's/[a-z]/X/g' file.txt |
\w |
Mot (ERE) | sed -E 's/\w+/WORD/g' file.txt |
\s |
Espace (ERE) | sed -E 's/\s+/ /g' file.txt |
Exemples pratiques
# Commenter lignes commençant par chiffre
sed 's/^[0-9]/# &/' file.txt
# Supprimer espaces début/fin ligne
sed 's/^[[:space:]]*//; s/[[:space:]]*$//' file.txt
# Remplacer IP par XXX
sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/XXX.XXX.XXX.XXX/g' log.txt
# Extraire domaine email
sed -E 's/.*@([a-z0-9.-]+).*/\1/' emails.txt
# Valider format téléphone
sed -n '/^[0-9]\{10\}$/p' phones.txt
Groupes de capture
# BRE : \( \) et \1
sed 's/\([a-z]*\)@\([a-z]*\)\.com/User: \1, Domain: \2/' emails.txt
# ERE : ( ) et \1 (plus lisible)
sed -E 's/([a-z]*)@([a-z]*)\.com/User: \1, Domain: \2/' emails.txt
# Inverser prénom nom
sed -E 's/([A-Z][a-z]+) ([A-Z][a-z]+)/\2, \1/' names.txt
# John Doe → Doe, John
Classes POSIX
# [:digit:] = [0-9]
sed 's/[[:digit:]]/#/g' file.txt
# [:alpha:] = [a-zA-Z]
sed 's/[[:alpha:]]/X/g' file.txt
# [:space:] = espaces/tabs
sed 's/[[:space:]]/,/g' file.txt
# [:alnum:] = alphanumérique
sed 's/[^[:alnum:]]//g' file.txt
Cas DevOps avancés
# Logs : extraire timestamp
sed -E 's/^([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}).*/\1/' app.log
# Config : valider format KEY=VALUE
sed -n '/^[A-Z_]\+=[^[:space:]]\+$/p' .env
# CSV : valider email
sed -E '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/!d' emails.csv
# Markdown : extraire liens
sed -E 's/.*\[([^]]+)\]\(([^)]+)\).*/Link: \1 -> \2/' README.md
Note : -E (ERE) évite d'échapper +, ?, |, () (plus lisible).Option -f (file script)
sed -f SCRIPT.sed fichier.txt
Exécute toutes les commandes du fichier SCRIPT.sed.Structure fichier script
# cleanup.sed
# Supprime commentaires
/^#/d
# Supprime lignes vides
/^$/d
# Remplace tabs par espaces
s/\t/ /g
# Trim espaces fin ligne
s/[[:space:]]*$//
Utilisation :sed -f cleanup.sed config.txt
Cas d'usage : normalisation logs
# normalize-logs.sed
# Anonymiser IP
s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/XXX.XXX.XXX.XXX/g
# Masquer emails
s/[a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,\}/***@***.com/g
# Supprimer DEBUG/INFO
/\[DEBUG\]/d
/\[INFO\]/d
# Garder seulement WARN/ERROR
/\[WARN\]/!{/\[ERROR\]/!d}
Application :sed -f normalize-logs.sed app.log > clean.log
Transformation CSV
# csv-transform.sed
# Supprimer header
1d
# Remplacer séparateur ; par ,
s/;/,/g
# Ajouter guillemets colonnes texte
s/^\([^,]*\),\([^,]*\),/"\1","\2",/
# Supprimer lignes vides
/^$/d
Configuration multi-étapes
# deploy-config.sed
# Environnement production
s/DEBUG=true/DEBUG=false/
s/localhost/production.example.com/g
s/port: 3000/port: 8080/
# Database
s/db.local/db.prod.internal/
s/max_connections=10/max_connections=100/
# Logs
s/log_level=debug/log_level=warn/
Déploiement :for conf in *.yaml; do
sed -i.dev -f deploy-config.sed "$conf"
done
Avantages vs -e multiple
| Méthode | Lisibilité | Maintenance | Réutilisabilité |
|---|---|---|---|
-e répété |
❌ Faible | ❌ Difficile | ❌ Non |
-f script.sed |
✅ Haute | ✅ Facile | ✅ Oui |
# Inline (difficile à lire)
sed -e 's/foo/bar/' -e '/^#/d' -e 's/old/new/g' -e '/^$/d' file.txt
# Script (clair)
sed -f transform.sed file.txt
Combinaison -f et -e
# Script + commandes inline
sed -f base-cleanup.sed -e 's/CUSTOM/VALUE/' file.txt
CI/CD : scripts versionnés
# scripts/sed/
├── anonymize.sed # Anonymisation logs
├── config-prod.sed # Config production
├── csv-normalize.sed # Normalisation CSV
└── sanitize.sed # Nettoyage général
# Utilisation pipeline
sed -f scripts/sed/anonymize.sed logs/*.log
Avantage : Scripts sed versionnés = transformations reproductibles et testables.1. Nettoyage logs
# Supprimer DEBUG/INFO
sed -e '/DEBUG/d' -e '/INFO/d' app.log > errors.log
# Anonymiser IP
sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/XXX.XXX.X.XX/g' access.log
# Supprimer lignes vides + trim
sed -e '/^$/d' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' app.log
# Garder seulement dernières 1000 lignes
sed -n -e :a -e '1,1000!{P;N;D;};N;ba' huge.log
2. Configuration automatique
# Mise à jour port
sed -i 's/port: 8080/port: 9090/' config.yaml
# Changer environnement
sed -i 's/NODE_ENV=development/NODE_ENV=production/' .env
# Database connection
sed -i 's/localhost:3306/db.prod.local:3306/' app.conf
# Batch configs
find /etc/app -name '*.conf' -exec sed -i.bak 's/old_value/new_value/' {} \;
3. Transformation CSV/données
# Changer séparateur
sed 's/;/,/g' export.csv > import.csv
# Supprimer header
sed '1d' data.csv
# Ajouter guillemets
sed 's/^\|$/"/g; s/,/","/g' data.csv
# Filtrer colonnes (garder 1 et 3)
sed -E 's/^([^,]*),([^,]*),([^,]*).*/\1,\3/' data.csv
4. Scripts : mise à jour chemins
# Changer shebang
sed -i '1s|^#!/usr/bin/python|#!/usr/bin/env python3|' *.py
# Mettre à jour chemins
find . -name '*.sh' -exec sed -i 's|\/old\/path|\/new\/path|g' {} +
# Import modules Python
sed -i 's/^from old_module/from new_module/' **/*.py
5. Templating / injection contenu
# HTML : analytics
sed '/<\/head>/i\<script src="analytics.js"></script>' index.html
# Remplacer variables
sed 's/{{VERSION}}/1.2.3/g; s/{{ENV}}/production/g' template.yaml
# Génération config depuis template
sed -e "s/{{DB_HOST}}/$DB_HOST/" \
-e "s/{{DB_PORT}}/$DB_PORT/" \
template.conf > app.conf
6. CI/CD : déploiement automatisé
# Mise à jour version package.json
sed -i "s/\"version\": \".*\"/\"version\": \"$NEW_VERSION\"/" package.json
# Dockerfile : nouvelle base image
sed -i "s/^FROM .*/FROM node:${NODE_VERSION}-alpine/" Dockerfile
# Kubernetes : namespace
sed "s/namespace: dev/namespace: $DEPLOY_ENV/" k8s/*.yaml
7. Conversion formats
# DOS → Unix (CRLF → LF)
sed -i 's/\r$//' file.txt
# Unix → DOS (LF → CRLF)
sed -i 's/$/\r/' file.txt
# Markdown → Plain text (supprimer liens)
sed -E 's/\[([^]]+)\]\([^)]+\)/\1/g' README.md
8. Validation / extraction
# Extraire emails
sed -n 's/.*\([a-zA-Z0-9._%+-]\+@[a-zA-Z0-9.-]\+\.[a-zA-Z]\{2,\}\).*/\1/p' file.txt
# Valider format IP
sed -n '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$/p' ips.txt
# Extraire URLs
sed -n 's/.*https\?:\/\/\([^[:space:]]\+\).*/\1/p' links.txt
Récapitulatif par domaine
| Domaine | Usage sed | Fréquence |
|---|---|---|
| DevOps | Config auto, templating | ⭐⭐⭐⭐⭐ |
| SysAdmin | Logs, maintenance | ⭐⭐⭐⭐⭐ |
| Data Engineering | CSV, transformations | ⭐⭐⭐⭐ |
| CI/CD | Versioning, déploiement | ⭐⭐⭐⭐ |
| Scripting | Automatisation | ⭐⭐⭐⭐⭐ |