Un port à changer dans une configuration Nginx, une adresse IP à mettre à jour dans dix fichiers, un nom d’hôte à corriger après un renommage de serveur — ces opérations reviennent constamment en administration Linux. Savoir les faire vite, sans erreur et sans ouvrir un éditeur graphique, fait partie des compétences de base d’un administrateur.
Ce guide couvre les trois approches principales : le remplacement non-interactif avec sed (le plus courant en administration), le remplacement interactif dans un éditeur (nano, vi, vim), et le remplacement multi-fichiers en combinant find et sed.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Remplacer un mot ou un motif dans un fichier avec
sed - Vérifier un remplacement avant de l’appliquer
- Rechercher et remplacer dans nano, vi et vim
- Appliquer un remplacement sur plusieurs fichiers à la fois
- Choisir le bon outil selon la situation
Quel outil pour quelle situation ?
Section intitulée « Quel outil pour quelle situation ? »Avant de détailler chaque méthode, voici la règle de décision rapide :
| Situation | Outil recommandé | Pourquoi |
|---|---|---|
| Remplacement rapide dans un fichier de config | sed | Une seule commande, pas d’éditeur à ouvrir |
| Remplacement dans un script ou un pipeline | sed | Non-interactif, scriptable |
| Remplacement avec vérification visuelle ligne par ligne | vim (:s/.../gc) | Confirmation avant chaque remplacement |
| Édition ponctuelle d’un fichier simple | nano | Le plus accessible pour un débutant |
| Remplacement massif dans 10+ fichiers | find + sed | Automatisé, pas d’intervention manuelle |
| Fichier volumineux avec contexte à comprendre | vim ou vi | Navigation et recherche intégrées |
Remplacement non-interactif avec sed
Section intitulée « Remplacement non-interactif avec sed »sed (stream editor) est l’outil de référence pour modifier du texte en ligne de commande. Il lit un fichier ligne par ligne, applique une transformation et écrit le résultat. Vous ne quittez jamais votre terminal.
Syntaxe de base
Section intitulée « Syntaxe de base »sed 's/ancien/nouveau/' fichierCette commande remplace la première occurrence de ancien par nouveau sur chaque ligne, et affiche le résultat sur la sortie standard. Le fichier original n’est pas modifié.
Pour remplacer toutes les occurrences sur chaque ligne, ajoutez le drapeau g (global) :
sed 's/ancien/nouveau/g' fichierVérifier avant de modifier
Section intitulée « Vérifier avant de modifier »La bonne pratique consiste à toujours vérifier le résultat avant de toucher au fichier. sed affiche le résultat par défaut sans modifier le fichier — profitez-en.
-
Voir ce qui va changer :
Fenêtre de terminal sed 's/8080/8443/g' /etc/nginx/sites-available/defaultLe fichier entier s’affiche avec les remplacements appliqués. Comparez visuellement.
-
Cibler les lignes concernées :
Fenêtre de terminal grep -n '8080' /etc/nginx/sites-available/defaultVous voyez les numéros de lignes contenant le motif — utile pour vérifier qu’il n’y a pas de remplacement indésirable.
-
Appliquer la modification :
Fenêtre de terminal sed -i 's/8080/8443/g' /etc/nginx/sites-available/defaultL’option
-i(in-place) modifie le fichier directement.
Exemples concrets d’administration
Section intitulée « Exemples concrets d’administration »Changer un port :
sed -i 's/Listen 80/Listen 443/g' /etc/apache2/ports.confRemplacer une adresse IP :
sed -i 's/192.168.1.10/192.168.1.20/g' /etc/hostsModifier un paramètre de configuration :
sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_configCette dernière commande décommente et modifie la ligne en une seule opération. Le ^# signifie “commence par #” et .* correspond au reste de la ligne.
Délimiteur alternatif
Section intitulée « Délimiteur alternatif »Quand le texte contient des / (chemins de fichiers par exemple), utilisez un autre délimiteur pour éviter les échappements illisibles :
# Difficile à liresed -i 's/\/usr\/local\/bin/\/opt\/bin/g' script.sh
# Lisible — utilisez | ou # comme délimiteursed -i 's|/usr/local/bin|/opt/bin|g' script.shRestreindre à certaines lignes
Section intitulée « Restreindre à certaines lignes »Vous pouvez limiter le remplacement à une plage de lignes ou à un motif :
# Lignes 10 à 20 seulementsed -i '10,20s/ancien/nouveau/g' fichier.conf
# Uniquement les lignes contenant "server"sed -i '/server/s/8080/8443/g' nginx.confRechercher et remplacer dans un éditeur
Section intitulée « Rechercher et remplacer dans un éditeur »Dans nano, le raccourci Ctrl+\ lance la fonction rechercher/remplacer :
-
Ouvrez le fichier :
Fenêtre de terminal nano /etc/hosts -
Appuyez sur
Ctrl+\ -
Tapez le texte à chercher, puis Entrée
-
Tapez le texte de remplacement, puis Entrée
-
Pour chaque occurrence, nano vous demande :
Y(remplacer),N(ignorer),A(tout remplacer)
Quand utiliser nano : fichier simple, modification ponctuelle, vous voulez voir ce que vous faites à chaque étape. Détails complets dans le guide Nano.
Vi / Vim
Section intitulée « Vi / Vim »Dans vi ou vim, le remplacement se fait depuis le mode commande :
:%s/ancien/nouveau/g # Tout le fichier, toutes les occurrences:%s/ancien/nouveau/gc # Avec confirmation pour chaque occurrence:10,20s/ancien/nouveau/g # Lignes 10 à 20 seulementLe % signifie “tout le fichier”. Le drapeau c (confirm) vous montre chaque occurrence et attend votre réponse :
y— remplacern— ignorera— tout remplacer (sans plus demander)q— arrêter
Pour chercher sans remplacer, tapez /motif en mode normal, puis n pour l’occurrence suivante.
Quand utiliser vim : fichier complexe, besoin de contexte visuel, remplacement sélectif avec confirmation. Détails complets dans le guide Vi et le guide Vim.
Remplacement dans plusieurs fichiers
Section intitulée « Remplacement dans plusieurs fichiers »find + sed
Section intitulée « find + sed »Pour appliquer un remplacement dans tous les fichiers d’un répertoire :
find /etc/nginx/ -name '*.conf' -exec sed -i 's/8080/8443/g' {} +Cette commande :
- trouve tous les fichiers
.confdans/etc/nginx/ - applique le remplacement
sedsur chacun
grep + sed en pipeline
Section intitulée « grep + sed en pipeline »Variante qui cible uniquement les fichiers contenant le motif :
grep -rl 'ancien-hostname' /etc/ | xargs sed -i 's/ancien-hostname/nouveau-hostname/g'grep -rl liste les fichiers contenant le motif (récursivement, noms uniquement), et xargs passe chaque fichier à sed.
Exercice pratique
Section intitulée « Exercice pratique »-
Créez un fichier de test :
Fenêtre de terminal cat > /tmp/test-config.conf << 'EOF'server {listen 8080;server_name old-server.example.com;root /var/www/old-server;}EOF -
Vérifiez le contenu :
Fenêtre de terminal cat /tmp/test-config.conf -
Remplacez le port avec
sed(sans modifier le fichier) :Fenêtre de terminal sed 's/8080/443/' /tmp/test-config.confVérifiez que la ligne
listenaffiche bien443. -
Remplacez le nom d’hôte (en modifiant le fichier) :
Fenêtre de terminal sed -i 's/old-server/new-server/g' /tmp/test-config.confcat /tmp/test-config.confLes deux occurrences de
old-serverdoivent avoir été remplacées. -
Ouvrez dans vim et remplacez avec confirmation :
Fenêtre de terminal vim /tmp/test-config.confTapez
:%s/new-server/prod-server/gcpuis validez chaque occurrence avecy.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
sed ne remplace rien | Le motif ne correspond pas exactement (casse, espaces) | Vérifier avec grep d’abord, utiliser -i pour ignorer la casse dans grep |
| Remplacement partiel (première occurrence seulement) | Drapeau g manquant | Utiliser s/ancien/nouveau/g |
sed: -e expression #1, char X: unknown option to 's' | Le texte contient le délimiteur / | Utiliser un délimiteur alternatif : s|ancien|nouveau|g |
Fichier modifié par erreur avec -i | Pas de sauvegarde préalable | Restaurer depuis .bak si sed -i.bak a été utilisé, sinon depuis un backup système |
Permission denied sur un fichier dans /etc/ | Droits insuffisants | Utiliser sudo sed -i ... |
| Remplacement dans vim n’atteint pas toutes les lignes | Portée limitée (:s sans %) | Utiliser :%s/ancien/nouveau/g pour tout le fichier |
Caractères spéciaux dans le motif (., *, [) | Interprétés comme des expressions régulières | Échapper avec \ : sed 's/192\.168\.1\.10/192.168.1.20/g' |
À retenir
Section intitulée « À retenir »sed -i 's/ancien/nouveau/g' fichierest la commande de remplacement la plus utilisée en administration Linux.- Toujours vérifier avant d’utiliser
-i: lancezsedsans-iou utilisezgrep -npour voir les lignes concernées. sed -i.bakcrée automatiquement une copie de sauvegarde — à privilégier sur les fichiers critiques.- Nano (
Ctrl+\) pour les remplacements ponctuels visuels. - Vim (
:%s/.../gc) pour les remplacements avec confirmation ligne par ligne. find+sedougrep -rl+xargs sedpour le remplacement en masse dans plusieurs fichiers.- Les points (
.) dans les adresses IP sont des caractères spéciaux regex — échappez-les avec\.