Une petite compilation illustrée de 
commandes Unix parfois utiles

uniq, tr, find, sort, csplit, cut, paste, join, patch


Si l'on dispose d'un fichier fic qui ressemble à ceci :

AAAA
AAAA
BBBB
CCCC
CCCC
DDDD

la commande uniq fic renverra

AAAA
BBBB
CCCC
DDDD
 

Les lignes identiques doivent être adjacentes pour être supprimées.
L'option -u permet de n'afficher que les lignes présentes à l'origine en un seul exemplaire.
L'option -d permet de n'afficher que les lignes présentes initialement en plusieurs exemplaires.
Les options -f (resp. -s) permettent d'ignorer un certain nombre de champs (resp. de caractères) en début de chaque ligne avant d'entamer le processus de comparaison.
 
 

Pour faire du Rot-13 sur un fichier in, par exemple :

tr [a-z] [n-za-m] < in > out

Pour convertir les majuscules en minuscules :

tr "[A-Z]" "[a-z]" < in > out

L'option  -d permet de supprimer la liste de caractères specifiée.
 

Permet de trouver des fichiers répondant à certains critères, et éventuellement d'effectuer certaines actions sur les fichiers répondant à la requête. Les critères peuvent se formuler en termes de nom (-name), de propriétaire (-user), de droits d'accès (-perm), de taille (-size), de nombre de liens (-links), de date d'accès/modification/changement (-atime, -mtime, -ctime).

Par exemple, pour supprimer dans le répertoire courant les fichiers core ou ceux appartenant à l'utilisateur dilbert :

find . \( -name core -o -user dilbert \) -exec rm{}\;

Les parenthèses permettent de construire un critère "composé", l'option -o étant utilisée pour OR, le ! pour la négation, alors qu'une simple juxtaposition permet de traduire le AND.
D'autres exemples :
find . -mtime +3    # trouve les fichiers modifiés il y a plus de 3 jours
find . -newer fic        # trouve les fichiers modifiés plus récemment que fic
 

Permet d'effectuer un tri lexicographique (i.e selon l'ordre ASCII, ce qui signifie entre autres que la sequence "12 " - notez l'espace - est considérée comme étant supérieure à 119), numérique (cf. option -n) ou chronologique (cf. option -M). Le séparateur de champs (l'espace, par défaut) peut etre modifié par l'option -t.
Si l'on veut trier un fichier fic sur la base du sixième champ, on tapera :

sort +5 fic

car les champs sont numérotés a partir de 0. Si l'on veut trier ce même fichier sur la base du huitième caractère du quatrième champ, la commande sera :

sort +3.7 fic

car les caractères à l'intérieur d'un champ sont également numérotés à partir de 0.
 

La commande csplit fic /regexp/+n  permet d'éclater un fichier fic en plusieurs morceaux, la scission intervenant à la n-ième ligne après l'expression régulière passée en argument. Si l'argument n'est pas une regexp mais un numéro, csplit fonctionne comme split, et scinde le fichier en morceaux de n lignes.
  Permet d'extraire des parties de lignes d'un fichier. La commande cut -c1-5 fic extrait les 5 premiers caractères du fichier fic, alors que cut -f3,7 extrait les 3ème et 7ème champs (noter la différence entre la séparation par tiret et celle par virgule). Le séparateur par défaut est la tabulation, l'option -d permettant de le redéfinir.
  Cette commande permet de fusionner les lignes correspondantes de plusieurs fichiers. Ainsi, si le fichier fic1 contient
1
2
3
et que le fichier fic2 contient
4
5
6
la commande paste fic1 fic2 generera
1    4
2    5
3    6

L'entrée standard est passée en argument de paste par l'option tiret (-). Supposons que le répertoire courant ne contienne que trois fichiers fic1, fic2 et fic3. La commande ls fic? | paste - fic1 génèrera la sortie suivante :
fic1    1
fic2    2
fic3    3
 

Une fois encore, le plus simple est de prendre un exemple. Soit fic1 un fichier qui contient

Brésil 0
France 3

et fic2 un fichier qui contient

Brésil 1994
France 1998

La commande join -j1 1 fic1 fic2 genèrera

Brésil 0 1994
France 3 1998

L'option -j1 n permet de spécifier que c'est le n-ième champ de chacun des fichiers qui définit la relation.