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 8080/' /etc/apache2/ports.confLe motif est ancré : ^ pour le début de ligne, $ pour la fin. Sans ces
ancres, s/Listen 80/…/ modifierait aussi une ligne Listen 8080. Et le port
visé doit être libre : le ports.conf de Debian déclare déjà Listen 443
pour le module SSL, et y changer Listen 80 en Listen 443 fait refuser la
configuration par Apache (Cannot define multiple Listeners on the same IP:port). Validez toujours avec sudo apache2ctl configtest avant de
recharger.
Remplacer une adresse IP :
sed -i 's/\b192\.168\.1\.10\b/192.168.1.20/g' /etc/hostsLes points échappés (\.) ne correspondent qu'à un point, et les bornes
\b empêchent de toucher une adresse plus longue. Sans elles, la ligne
192.168.1.100 db deviendrait 192.168.1.200 db : c'est le piège de l'adresse
qui en contient une autre.
Modifier 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. Sur Debian et Ubuntu, sshd_config inclut d'abord les fichiers de /etc/ssh/sshd_config.d/, et la première valeur lue l'emporte : vérifiez la valeur réellement appliquée avec sudo sshd -T | grep -i permitrootlogin.
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 -rlZ 'ancien-hostname' /etc/ | xargs -0 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. Le couple -Z / -0 sépare les noms par un caractère nul : sans lui, un fichier nommé a b.conf est coupé en deux noms, et sed répond can't read.
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 (grep -i ignore la casse), puis ajouter le drapeau I à sed : s/ancien/nouveau/gI |
| 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 -rlZ+xargs -0 sedpour le remplacement en masse dans plusieurs fichiers.- Les points (
.) dans les adresses IP sont des caractères spéciaux regex, échappez-les avec\.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
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)Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.
Points faibles
Aucun sujet sous le seuil de réussite.
À faire ensuite
Des indices pour retenter votre chance ?
Continuer le cours : Transformer du texte avec cut, tr et paste
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications