cut
Sommaire
La commande "cut" permet d'extraire du contenu de chaque ligne d'un fichier et d'afficher ce contenu. Le verbe anglais "cut" signifie "couper", la commande permet effectivement de couper une partie de chaque ligne d'un fichier.
La sélection des caractères à afficher peut se faire de deux façons: par la position des caractères ou par la sélection de colonne en fonction d'un séparateur.
Sélection par position des caractères.
Les options -b et -c permettent de sélectionner des caractères selon leur position sur la ligne. La différence entre ces deux options est que -b (ou --bytes) utilise un mode binaire tandis que -c (ou --characters) utilise le mode caractère.
Pour sélectionner des caractères en fonction de leur position, il faut donc utiliser -b ou -c suivit d'une liste de positions à conserver. Le premier caractère de la ligne a la position 1.
Exemples
La commande "ps ax" affiche l'ensemble des processus du système, ainsi que des informations d'état sur ces processus:
$ ps ax ... 5192 ? S 0:00 hald-addon-keyboard: listening on /dev/input/event5 5200 ? S 0:00 hald-addon-storage: polling /dev/hda 5219 ? Ss 0:00 /usr/sbin/dhcdbd --system 5234 ? Ssl 0:00 /usr/sbin/NetworkManager --pid-file var/run/NetworkManager/NetworkManager.pid ...
On peut chaîner la commande cut à la commande ps afin de supprimer les premières colonnes et ne garder que la liste des processus:
$ ps ax | cut -c '28-' ... hald-addon-keyboard: listening on /dev/input/event5 hald-addon-storage: polling /dev/hda /usr/sbin/dhcdbd --system /usr/sbin/NetworkManager --pid-file /var/run/NetworkManager/NetworkManager.pid ...
Le sélecteur "28-" permet de ne conserver que les caractères depuis la position 28 jusque la fin de la ligne.
Il est aussi possible de sélectionner plusieurs intervalles à conserver dans une ligne. Tout comme dans l'exemple de ps ax, cela permet de n'afficher que certaines informations d'une commande.
Par exemple, la commande ls -l affiche la liste des fichiers d'un dossier avec de nombreuses informations:
$ ls -l total 20 drwxr-xr-x 2 root root 72 2007-05-11 15:32 if-down.d drwxr-xr-x 2 root root 80 2007-04-26 23:02 if-post-down.d drwxr-xr-x 2 root root 64 2007-04-26 23:02 if-pre-up.d drwxr-xr-x 2 root root 4096 2007-05-11 15:32 if-up.d -rw-r--r-- 1 root root 354 2007-05-20 22:43 interfaces
En chaînant la commande cut avec la commande ls il est possible d'obtenir facilement une liste des fichiers avec leurs droits:
$ ls -l | grep -Ev "^total [0-9]+$" | cut -c "1-11,46-" drwxr-xr-x if-down.d drwxr-xr-x if-post-down.d drwxr-xr-x if-pre-up.d drwxr-xr-x if-up.d -rw-r--r-- interfaces
On peut voir ici dans l'utilisation de cut (cut -c "1-11,46-") qu'il est possible d'utiliser plusieurs intervalles, ceux-ci sont séparés par des virgules.
Sélection à l'aide de délimiteurs
La seconde possibilité pour sélectionner des caractères dans une ligne est d'utiliser des délimiteurs pour séparer la ligne en colonnes. Il est alors possible de choisir la ou les colonnes à afficher.
Le délimiteur par défaut est le caractère de tabulation ("\t") mais l'option "-d" (ou "--delimiter") permet de choisir un autre caractère.
L'option "-f" (ou "--fields") permet ensuite de sélectionner une liste de colonnes à affiche dans la ligne.
Exemples
Le fichier /etc/passwd contient la liste des utilisateurs ainsi que des informations sur le dossier de l'utilisateur, son shell, etc. Voici un exemple du contenu de ce fichier:
$ cat /etc/passwd ... haldaemon:x:108:108:Hardware abstraction layer,,,:/var/run/hal:/bin/false hplip:x:105:7:HPLIP system user,,,:/var/run/hplip:/bin/false gdm:x:106:111:Gnome Display Manager:/var/lib/gdm:/bin/false ikipou:x:1000:1000:Benjamin Poulain:/home/ikipou:/bin/bash ...
On voit que les informations sont séparées par des doubles points ":", on peut donc utiliser ce caractère comme délimiteur (avec -d) pour afficher une colonne quelconque.
Par exemple, la commande suivante affichera la liste des utilisateurs du système:
$ cut -d: -f1 /etc/passwd ... haldaemon hplip gdm ikipou ...
Pour avoir l'utilisateur et son numéro d'utilisateur (UID), on peut choisir d'afficher plusieurs colonnes:
$ cut -d: -f1,3 /etc/passwd ... haldaemon:108 hplip:105 gdm:106 ikipou:1000 ...
Syntaxe de liste
Les options -c, -b et -f peuvent prendre une liste d'intervalles comme paramètres, ces listes sont séparées par des virgules.
Les intervalles peuvent être exprimés de la façon suivante:
- X
- Sélectionner la position X, les positions commencent à 1
- X-
- Sélectionner depuis la position X jusque la fin de la ligne ou la dernière position
- X-Y
- Sélectionner de la position X à la position Y incluse
- -Y
- Sélectionner depuis la première position jusque la position Y
Il est préférable d'entourer un intervalle avec des guillemets ou des apostrophes afin qu'ils ne soient pas confondus avec des options.
Options importantes
- -b
- Sélectionner une série d'octet par rapport à leur position.
- -c
- Sélectionner une série de caractères par rapport à leur position.
- -f
- Sélectionner des colonnes séparées par un délimiteur.
- -d
- Permet de préciser le délimiteur à utiliser avec l'option -f
L'ensemble des options est disponible sur la page de manuel de cut
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre