Aide-mémoire du traitement de texte sous Linux
Vous scrutez un fichier journal de 2 Go à la recherche d’appels API échoués survenus dans la dernière heure. Ou peut-être devez-vous extraire des adresses e-mail d’une exportation CSV. Ces tâches ne devraient pas nécessiter l’écriture d’un script Python.
Cet aide-mémoire couvre les commandes essentielles de traitement de texte sous Linux—grep, awk, sed et leurs équivalents modernes—avec des exemples pratiques pour les workflows quotidiens de développement frontend et full-stack.
Points clés à retenir
grepetripgrepsont vos outils de prédilection pour rechercher du texte dans les fichiers, ripgrep offrant des gains de vitesse et une prise en compte du.gitignorepour les grandes bases de code.sedgère les opérations de recherche-remplacement basées sur les flux, mais attention aux différences de comportement entre les versions GNU et BSD.awkexcelle dans le traitement orienté colonnes pour les journaux, les CSV et autres textes structurés.jqcomble le vide laissé pargrepetawklors du travail avec des données JSON.- L’opérateur pipe (
|) est le ciment qui enchaîne ces commandes en pipelines puissants et composables.
Commandes de recherche principales : grep et ripgrep
grep recherche des motifs dans les fichiers et affiche les lignes correspondantes. C’est la base de tout pipeline de traitement de texte.
# Basic pattern search
grep "error" server.log
# Case-insensitive search
grep -i "warning" app.log
# Show line numbers
grep -n "TODO" src/*.js
# Invert match (lines NOT containing pattern)
grep -v "debug" output.log
# Extended regex (-E enables +, ?, |, and grouping)
grep -E "error|warning|fatal" app.log
# Count matches only
grep -c "404" access.log
ripgrep (rg) est une alternative plus rapide qui respecte le .gitignore par défaut :
# Recursive search (default behavior)
rg "useState" ./src
# Search specific file types
rg -t js "async function"
# Show context around matches
rg -C 3 "Exception" logs/
Pour les grandes bases de code, ripgrep est généralement 2 à 5 fois plus rapide que grep et ignore automatiquement les fichiers non pertinents.
Transformation de texte avec sed
sed effectue de l’édition de flux—des opérations de recherche-remplacement sans ouvrir de fichier dans un éditeur.
# Replace first occurrence per line
sed 's/http/https/' urls.txt
# Replace all occurrences (global flag)
sed 's/old/new/g' config.txt
# Delete lines matching pattern
sed '/^#/d' config.ini
# In-place editing (GNU sed)
sed -i 's/localhost/127.0.0.1/g' .env
# macOS/BSD requires an empty backup extension
sed -i '' 's/localhost/127.0.0.1/g' .env
Remarque : Le comportement de l’option
-idiffère entre GNU sed et BSD sed. Sur macOS, incluez toujours une chaîne vide (-i '') ou spécifiez une extension de sauvegarde (par ex.,-i .bak).
Traitement par colonnes avec awk
awk excelle avec le texte structuré—journaux, CSV et données délimitées par des espaces. POSIX awk gère la plupart des tâches courantes de manière portable.
# Print specific columns
awk '{print $1, $4}' access.log
# Custom field separator (CSV)
awk -F',' '{print $2}' data.csv
# Filter by condition
awk '$3 > 500 {print $1, $3}' response_times.log
# Sum a column
awk '{sum += $2} END {print sum}' sales.csv
# BEGIN/END blocks for headers
awk 'BEGIN {print "User\tCount"} {print $1, $2}' stats.txt
Commandes complémentaires essentielles
# Sort and deduplicate (with counts, descending)
sort access.log | uniq -c | sort -rn
# Extract columns by delimiter
cut -d',' -f1,3 users.csv
# Character translation (lowercase to uppercase)
tr '[:lower:]' '[:upper:]' < input.txt
# Count lines in a file
wc -l package.json
# Find files by name pattern
find ./src -name "*.test.js" -type f
Discover how at OpenReplay.com.
Traitement JSON avec jq
Pour le développement web moderne, jq gère l’analyse JSON que grep et awk ne peuvent pas gérer proprement :
# Extract a field
jq '.data.users' response.json
# Filter array elements
jq '.items[] | select(.status == "active")' data.json
# Format API response
curl -s https://api.example.com/users | jq '.[].email'
Notez que le premier exemple ci-dessus évite une utilisation inutile de cat. jq peut lire les fichiers directement, donc cat response.json | jq '...' est superflu.
Exemples de pipelines pratiques
Filtrer les erreurs du jour dans les journaux :
grep "$(date +%Y-%m-%d)" app.log | grep -i error | awk '{print $4, $5}'
Extraire les adresses IP uniques :
awk '{print $1}' access.log | sort -u
Trouver les fichiers les plus volumineux d’un projet par nombre de lignes :
find . -type f -name "*.js" -exec wc -l {} + | sort -rn | head -10
Nettoyer des données CSV (extraire des colonnes, supprimer les guillemets, dédupliquer) :
cut -d',' -f2,4 export.csv | sed 's/"//g' | sort -u
Référence rapide
| Tâche | Commande |
|---|---|
| Rechercher un motif | grep "pattern" file |
| Recherche récursive rapide | rg "pattern" |
| Remplacer du texte | sed 's/old/new/g' file |
| Extraire des colonnes | awk '{print $1}' file |
| Analyser du JSON | jq '.key' file.json |
| Trier et dédupliquer | sort -u file |
| Compter les lignes | wc -l file |
Conclusion
Maîtrisez ces commandes de traitement de texte sous Linux et vous gérerez la plupart des tâches d’analyse de journaux, d’extraction de données et de transformation de fichiers directement depuis le terminal. Commencez par grep pour la recherche, ajoutez awk pour le travail sur colonnes, et utilisez jq lorsque du JSON est impliqué. L’opérateur pipe (|) relie le tout, vous permettant de composer de petites commandes ciblées en pipelines qui rivalisent avec des scripts dédiés.
FAQ
Utilisez cut lorsque vos données ont un délimiteur unique cohérent et que vous devez simplement récupérer des champs spécifiques. Optez pour awk lorsque vous devez filtrer des lignes selon une condition, effectuer des calculs arithmétiques ou gérer des espaces irréguliers. awk traite par défaut les espaces consécutifs comme un seul délimiteur, ce qui le rend plus tolérant avec les fichiers journaux et les sorties de commandes.
Pour la plupart des workflows de développement, oui. ripgrep est plus rapide, respecte le .gitignore et utilise des paramètres par défaut sensés comme la recherche récursive. Cependant, grep est disponible par défaut sur pratiquement tous les systèmes Unix, ce qui en fait le choix le plus sûr pour les scripts shell portables. Si vous écrivez des scripts destinés à s'exécuter sur des serveurs ou conteneurs minimaux, restez avec grep.
Testez toujours votre commande sed sans l'option -i d'abord pour prévisualiser la sortie dans votre terminal. Lorsque vous êtes prêt à éditer en place, utilisez une extension de sauvegarde comme sed -i .bak sur les systèmes GNU. Sur macOS ou BSD, la syntaxe est sed -i .bak. Cela crée une copie du fichier original avant d'appliquer les modifications, vous donnant une option de retour en arrière.
Oui. jq est conçu pour naviguer dans des structures profondément imbriquées. Utilisez la notation par points pour parcourir les objets, la notation entre crochets pour les tableaux, et les expressions pipe pour enchaîner les filtres. Par exemple, jq '.data.users[] | select(.active == true) | .email' descend dans un tableau imbriqué, filtre selon une condition et extrait un champ, le tout en une seule commande.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.