dernière modification : 2023

Commandes de traitement de texte

Voici une sélection de commandes Unix de traitement de données textuelles.

1. Commandes historiques

Les commandes cat, diff, grep, head, more, sort, tail, tr, uniq, wc sont des commandes qui recherchent, extraient, reformatent, réordonnent, substituent du texte. Elles sont apparues dès les premières versions d’Unix.

cat

$ cat /etc/passwd

grep

Filtre les lignes d’un flux. De nombreuses options permettent de filtrer ce qui ne s’identifie pas (-v), de ne pas différencier majuscule/minuscule (-i), de sortir les n° de ligne (-n), les noms de fichiers contenant des lignes identifiées (-l), de comprendre les regex étendues (-E) et les Perl regex (-P), de simplement compter les correspondances (-c), de rechercher récursivement dans une arborescence de fichiers (-R), etc.

$ ps aux | grep $USER
$ curl -s https://math.univ-angers.fr | grep -i master

more — less

more est la commande historique, less en est une amélioration. Ces 2 commandes paginent un flux.

$ ps aux | less

tail — head

Extrait les dernières/premières lignes d’un flux.

$ grep ^.aba /usr/share/dict/words | head -4
$ grep ^.aba /usr/share/dict/words | tail -4

L’option -f de tail lui permet de rester en attente d’arrivée de nouvelles lignes dans le ou les fichiers spécifiés.

wc

Compte les caractères-mots-lignes d’un flux.

example
$ ls | wc -l

sort

Trie les lignes d’un flux (par ordre alphabétique par défaut, numérique en option).

$ sort ~/.bash_history

L’option -k permet de spécifier la clé de tri.

uniq

Garde 1 seul exemplaire d’une suite de lignes consécutives identiques (et peut compter les exemplaires regroupés).

$ cat << EOD | uniq
un
deux
deux
EOD

$ cat << EOD | uniq -c
un
un
deux
un
EOD

tr

Transpose un ensemble de caractères d’un flux.

$ man tr | tr AB BA
$ man tr | tr '[A-Za-z]' '[a-zA-Z]'

diff

Sort les différences entre 2 fichiers.

$ grep -v root /etc/passwd > /tmp/passwd
$ diff /etc/passwd /tmp/passwd
1d0
< root:x:0:0:root:/root:/bin/bash
10d8
< operator:x:11:0:operator:/root:/sbin/nologin

strings

Extrait les chaines de caractères d’un fichier binaire.

2. Commandes XXL

Ce sont des des commandes historiques plus sophistiquées. Ces commandes sont de véritables couteaux suisses du traitement de texte, dont la prise en main demande du temps et de la pratique. Mais il n’est pas nécessaire de les maitriser entièrement pour en tirer profit. Se trouvent dans cette catégorie :

  • ed, l’ancêtre des éditeurs de texte

  • vi, l’éditeur de texte standard

  • sed, l’éditeur de flux

  • awk

3. Autres commandes de traitement de texte

nom objet example

split

découpe un fichier en n fichiers de p lignes

split -4 /etc/passwd

cut

extrait une partie de chaque ligne

cut -c 1-15 /etc/passwd

paste

fusionne chaque ligne de n fichiers en une seule

join

fusionne chaque ligne de 2 fichiers ayant des champs communs

fmt

reformate un texte

expand unexpand

convertit les tabulations en espace, et inversement

column

formate un texte en colonnes

column -t -s : -c 120 -l 5 -H 2,5 /etc/passwd

colrm

supprime des colonnes de caractères d’un texte

tac

cat renversé

rev

renverse les lignes