Linux pour les devs - 05 - nano, vim, sed et awk

Editer des fichiers sous Linux : nano pour débuter, vim pour la vitesse, sed et awk pour le traitement de texte en ligne de commande.

  1. 01 Linux pour les devs - 00 - Pourquoi Linux meme si tu codes sur Mac ou Windows
  2. 02 Linux pour les devs - 01 - Le terminal, bash et zsh
  3. 03 Linux pour les devs - 02 - Fichiers et répertoires
  4. 04 Linux pour les devs - 03 - Permissions et droits d'acces
  5. 05 Linux pour les devs - 04 - Utilisateurs, groupes et sudo
  6. 06 Linux pour les devs - 05 - nano, vim, sed et awk
  7. 07 Linux pour les devs - 06 - Pipes et redirections
  8. 08 Linux pour les devs - 07 - grep et find en profondeur
  9. 09 Linux pour les devs - 08 - Les processus : comprendre ce qui tourne sur ta machine
  10. 10 Linux pour les devs - 09 - systemd : gerer tes services comme un pro
  11. 11 Linux pour les devs - 10 - Le réseau : comprendre ce qui passe par le fil
  12. 12 Linux pour les devs - 11 - Le firewall : contrôler qui entre et qui sort
  13. 13 Linux pour les devs - 12 - SSH : l'acces distant sécurisé
  14. 14 Linux pour les devs - 13 - Les variables d'environnement : configurer sans hardcoder
  15. 15 Linux pour les devs - 14 - Scripts bash : automatiser pour ne plus se répéter
  16. 16 Linux pour les devs - 15 - cron : les taches planifiees
  17. 17 Linux pour les devs - 16 - Les logs : lire, filtrer, comprendre
  18. 18 Linux pour les devs - 17 - Stockage et disques
  19. 19 Linux pour les devs - 18 - Les gestionnaires de paquets
  20. 20 Linux pour les devs - 19 - Les conteneurs sans Docker
  21. 21 Linux pour les devs - 20 - Securiser un serveur Linux
  22. 22 Linux pour les devs - 21 - Performance et diagnostic
  23. 23 Linux pour les devs - 22 - tmux : le multiplexeur de terminal
  24. 24 Linux pour les devs - 23 - Glossaire Linux

05 - nano, vim, sed et awk

Ce que tu vas apprendre

  • nano : l'éditeur simple qui fait le job
  • vim : les bases pour ne pas rester coince (et pourquoi apprendre)
  • sed : éditer un fichier sans l'ouvrir
  • awk : extraire et transformer des colonnes de texte

Prerequisites

Savoir naviguer dans le terminal et manipuler des fichiers. Voir l'article sur les fichiers.


Pourquoi apprendre un éditeur terminal

Tu as VSCode. Tu as IntelliJ. Pourquoi t'embeter avec un éditeur dans le terminal ? Parce que sur un serveur en SSH, tu n'as pas le choix. Quand tu dois modifier un fichier de config nginx, un .env en production, ou un crontab, tu ne vas pas installer VSCode sur le serveur. Tu dois pouvoir éditer un fichier, sauvegarder, et sortir. Vite.

nano : le choix raisonnable

nano est installe presque partout et fonctionne comme un éditeur normal. Pas de modes, pas de commandes cryptiques :

bash# Ouvrir un fichier
nano /etc/nginx/sites-available/monsite.conf

# Ouvrir a une ligne specifique
nano +42 config.yaml

Les raccourcis sont affiches en bas de l'ecran (le ^ signifie Ctrl) :

^O   Sauvegarder (Write Out)
^X   Quitter
^K   Couper la ligne
^U   Coller
^W   Chercher
^/   Chercher et remplacer
^G   Aide

Pour 90% des edits rapides sur un serveur, nano suffit. Pas besoin de s'excuser d'utiliser nano. Ca fait le travail.

vim : le couteau suisse

vim, c'est l'éditeur qui a une courbe d'apprentissage en forme de falaise. Les 30 premières minutes sont penibles. Mais une fois que tu passes le cap, tu edites du texte plus vite qu'avec n'importe quel autre outil. Et surtout, vim est installe sur chaque machine Linux de la planete.

Les modes de vim

vim fonctionne avec des modes. C'est le concept qui deroute tout le monde :

Mode NORMAL  : tu navigues et tu executes des commandes (mode par defaut)
Mode INSERT  : tu tapes du texte (comme un editeur normal)
Mode VISUAL  : tu selectionnes du texte
Mode COMMAND : tu tapes des commandes (commencent par :)
bash# Ouvrir vim
vim fichier.txt

# Tu es en mode NORMAL. Pour taper du texte :
i          # Passe en mode INSERT (avant le curseur)
a          # Passe en mode INSERT (apres le curseur)
o          # Nouvelle ligne en dessous et mode INSERT
O          # Nouvelle ligne au-dessus et mode INSERT

# Pour quitter le mode INSERT :
Esc        # Retour en mode NORMAL

Sauvegarder et quitter (la question universelle)

bash:w         # Sauvegarder
:q         # Quitter
:wq        # Sauvegarder et quitter
:q!        # Quitter sans sauvegarder (forcer)
:wq!       # Sauvegarder et quitter (forcer)
ZZ         # Raccourci pour :wq (en mode NORMAL)

"Comment quitter vim" est une des questions les plus posees sur StackOverflow. Plus d'un million de vues. Tu n'es pas seul.

Les commandes de base en mode NORMAL

bash# Navigation
h j k l    # Gauche, bas, haut, droite (ou les fleches)
w          # Mot suivant
b          # Mot precedent
0          # Debut de ligne
$          # Fin de ligne
gg         # Debut du fichier
G          # Fin du fichier
42G        # Aller a la ligne 42

# Edition
dd         # Supprimer la ligne
yy         # Copier la ligne
p          # Coller apres le curseur
u          # Annuler (undo)
Ctrl+R     # Refaire (redo)
x          # Supprimer le caractere sous le curseur
cw         # Changer le mot (supprime et passe en INSERT)

# Recherche
/motif     # Chercher vers le bas
?motif     # Chercher vers le haut
n          # Occurrence suivante
N          # Occurrence precedente

# Remplacement
:%s/ancien/nouveau/g     # Remplacer tout dans le fichier
:%s/ancien/nouveau/gc    # Avec confirmation pour chaque occurrence
:10,20s/foo/bar/g        # Remplacer entre les lignes 10 et 20

Mon workflow vim minimal

Quand je dois éditer un fichier de config sur un serveur, voici exactement ce que je fais :

bashvim /etc/nginx/nginx.conf
# 1. /worker_connections     (chercher le parametre)
# 2. n                        (occurrence suivante si besoin)
# 3. cw                       (changer le mot)
# 4. 2048                     (taper la nouvelle valeur)
# 5. Esc                      (retour en mode NORMAL)
# 6. :wq                      (sauvegarder et quitter)

Six étapes. Dix secondes. C'est la puissance de vim une fois que les bases sont acquises.

sed : éditer sans ouvrir

sed (stream editor) modifie du texte a la volee. C'est l'outil parfait pour les modifications scriptables :

bash# Remplacer la premiere occurrence sur chaque ligne
sed 's/ancien/nouveau/' fichier.txt

# Remplacer toutes les occurrences (g = global)
sed 's/ancien/nouveau/g' fichier.txt

# Modifier le fichier en place (-i)
sed -i 's/localhost/0.0.0.0/g' config.yaml

# Avec backup avant modification
sed -i.bak 's/localhost/0.0.0.0/g' config.yaml
# Cree config.yaml.bak avec l'original

# Supprimer des lignes
sed '/^#/d' config.conf          # Supprimer les commentaires
sed '/^$/d' fichier.txt          # Supprimer les lignes vides
sed '10,20d' fichier.txt         # Supprimer les lignes 10 a 20

# Inserer du texte
sed '1i\# Ce fichier est genere automatiquement' config.conf
# Insere un commentaire en premiere ligne

# Plusieurs operations a la chaine
sed -e 's/foo/bar/g' -e '/^$/d' -e 's/  */ /g' fichier.txt

Les cas d'usage réels que j'utilise régulièrement :

bash# Changer le port dans un fichier de config
sed -i 's/PORT=3000/PORT=8080/' .env

# Commenter une ligne
sed -i 's/^listen 80;/#listen 80;/' nginx.conf

# Decommenter une ligne
sed -i 's/^#listen 443;/listen 443;/' nginx.conf

# Remplacer dans tous les fichiers d'un dossier
find . -name "*.ts" -exec sed -i 's/oldFunction/newFunction/g' {} +

awk : traitement de colonnes

awk est un langage de traitement de texte. Ca semble intimidant, mais les bases couvrent 80% des besoins :

bash# Afficher une colonne (separateur par defaut : espaces)
$ df -h | awk '{print $1, $5}'
Filesystem Use%
/dev/sda1 45%
tmpfs 0%

# Avec un separateur specifique
$ cat /etc/passwd | awk -F: '{print $1, $7}'
root /bin/bash
nicolas /bin/bash
www-data /usr/sbin/nologin

# Filtrer par condition
$ ps aux | awk '$3 > 50 {print $11, $3"%"}'
# Affiche les processus qui utilisent plus de 50% CPU

# Calculer une somme
$ ls -l *.log | awk '{total += $5} END {print "Total:", total/1024/1024, "Mo"}'
Total: 42.5 Mo

# Compter les occurrences
$ cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# Top 10 des IP les plus frequentes

Un exemple que j'utilise toutes les semaines : analyser les logs d'acces nginx pour trouver les endpoints les plus sollicites :

bashawk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Ca affiche les 20 URLs les plus demandees avec leur nombre de requêtes. Pas besoin d'un outil de monitoring sophistique pour un diagnostic rapide.

Pour des cas d'usage plus avances de sed et awk dans des pipelines de déploiement, paltemps.fr propose des exemples concrets.

Résumé

  • nano pour les edits rapides : simple, intuitif, installe partout
  • vim : i pour insérer, Esc pour le mode normal, :wq pour sauvegarder et quitter
  • sed pour les modifications automatisables : sed -i 's/ancien/nouveau/g'
  • awk pour extraire des colonnes : awk '{print $1, $3}'
  • Apprendre vim prend du temps mais c'est un investissement qui paie

Precedent : Utilisateurs et groupes | Suivant : Pipes et redirections

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.