Aller au contenu

Bash : outils de traitement de texte

Les scripts s’appuient sur de petits outils qui se combinent avec des pipes. Les exemples utilisent des noms génériques.

Fenêtre de terminal
grep "erreur" journal.log # lignes contenant « erreur »
grep -i "erreur" journal.log # sans tenir compte des majuscules
grep -v "debug" journal.log # lignes qui NE contiennent PAS « debug »
grep -n "erreur" journal.log # avec les numéros de ligne
grep -c "erreur" journal.log # nombre de lignes
grep -r "motif" /etc/nginx # récursif dans un dossier
grep -E "erreur|warning" journal.log # expression régulière étendue (OU)
grep -q "motif" fichier # silencieux : sert uniquement au code de sortie
grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" journal.log # n'affiche que ce qui correspond (adresses IPv4)
Fenêtre de terminal
sed 's/ancien/nouveau/' fichier # 1re occurrence de chaque ligne
sed 's/ancien/nouveau/g' fichier # toutes les occurrences
sed -i 's/ancien/nouveau/g' fichier # modifie le fichier sur place
sed -i.bak 's/a/b/g' fichier # idem, avec copie de sauvegarde fichier.bak
sed -n '5,10p' fichier # affiche les lignes 5 à 10
sed '/^#/d' fichier # supprime les lignes de commentaires
sed '/^$/d' fichier # supprime les lignes vides
Fenêtre de terminal
awk '{print $1}' fichier # 1re colonne (séparateur : espaces)
awk -F: '{print $1, $3}' /etc/passwd # séparateur « : » : nom et identifiant
awk '$3 >= 1000 {print $1}' FS=: /etc/passwd # filtre : identifiants >= 1000
awk '{somme += $1} END {print somme}' nombres.txt # somme d'une colonne
awk 'NR > 1' fichier # toutes les lignes sauf la première
Fenêtre de terminal
cut -d: -f1 /etc/passwd # 1er champ, séparateur « : »
cut -d, -f2,4 donnees.csv # colonnes 2 et 4 d'un CSV simple
sort fichier # tri alphabétique
sort -n fichier # tri numérique
sort -rn fichier # numérique, décroissant
sort -u fichier # supprime les doublons
sort -k2 fichier # tri sur la 2e colonne
uniq -c # compte les lignes identiques consécutives (après sort)
wc -l fichier # nombre de lignes
wc -w fichier # nombre de mots
tr 'a-z' 'A-Z' <<< "texte" # majuscules
tr -d '\r' < windows.txt # supprime les retours chariot Windows
tr -s ' ' <<< "a b" # réduit les espaces répétés
Fenêtre de terminal
head -n 5 fichier # 5 premières lignes
tail -n 5 fichier # 5 dernières lignes
tail -f /var/log/syslog # suit un fichier en direct (Ctrl+c pour quitter)
tail -n +2 fichier # à partir de la ligne 2
Fenêtre de terminal
find /var/log -name "*.log" # par nom
find . -type f -size +100M # fichiers de plus de 100 Mo
find . -type d -name "cache" # dossiers
find . -type f -mtime -1 # modifiés depuis moins d'un jour
find . -type f -mtime +30 # modifiés il y a plus de 30 jours
find . -name "*.tmp" -delete # supprime les fichiers trouvés
find . -name "*.sh" -exec chmod +x {} \; # exécute une commande sur chaque fichier
find . -name "*.log" -print0 | xargs -0 gzip # avec xargs, noms robustes
Fenêtre de terminal
sudo apt install jq
curl -s https://api.exemple.com/etat | jq '.statut' # une valeur
curl -s https://api.exemple.com/liste | jq -r '.[].nom' # une liste de noms (-r : sans guillemets)
Fenêtre de terminal
# Adresses IP les plus présentes dans un journal d'accès
awk '{print $1}' acces.log | sort | uniq -c | sort -rn | head -10
# Nombre de lignes d'erreur par jour
grep -i "erreur" journal.log | cut -d' ' -f1 | sort | uniq -c
# Utilisateurs avec un shell de connexion
awk -F: '$7 ~ /bash|sh$/ {print $1}' /etc/passwd

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »