La commande Linux cut est utilisée pour le traitement de texte. Vous pouvez utiliser cette commande pour extraire une partie de texte d'un fichier en sélectionnant des colonnes.
Ce didacticiel fournit quelques exemples pratiques de commande de coupe que vous pouvez utiliser dans vos activités quotidiennes en ligne de commande.
Pour la plupart des exemples, nous utiliserons le fichier de test suivant.
$ cat test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
1. Sélectionnez la colonne de caractères
Pour extraire uniquement une colonne souhaitée d'un fichier, utilisez l'option -c. L'exemple suivant affiche le 2ème caractère de chaque ligne d'un fichier test.txt
$ cut -c2 test.txt a p s
Comme vu ci-dessus, les caractères a, p, s sont le deuxième caractère de chaque ligne du fichier test.txt.
2. Sélectionnez la colonne de caractères à l'aide de la plage
Une plage de caractères peut également être extraite d'un fichier en spécifiant les positions de début et de fin délimitées par -. L'exemple suivant extrait les 3 premiers caractères de chaque ligne d'un fichier appelé test.txt
$ cut -c1-3 test.txt cat cp ls
3. Sélectionnez la colonne de caractères en utilisant la position de début ou de fin
La position de début ou la position de fin peut être transmise à la commande de coupe avec l'option -c.
Ce qui suit spécifie uniquement la position de départ avant le '-'. Cet exemple extrait du 3ème caractère à la fin de chaque ligne du fichier test.txt.
$ cut -c3- test.txt t command for file oriented operations. command for copy files or directories. command to list out files and directories with its attributes.
Ce qui suit ne spécifie que la position finale après le '-'. Cet exemple extrait 8 caractères à partir du début de chaque ligne du fichier test.txt.
$ cut -c-8 test.txt cat comm cp comma ls comma
La ligne entière serait imprimée si vous ne spécifiez pas de nombre avant ou après le "-", comme indiqué ci-dessous.
$ cut -c- test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
4. Sélectionner un champ spécifique à partir d'un fichier
Au lieu de sélectionner x nombre de caractères, si vous souhaitez extraire un champ entier, vous pouvez combiner les options -f et -d. L'option -f spécifie quel champ vous souhaitez extraire et l'option -d spécifie quel est le délimiteur de champ utilisé dans le fichier d'entrée.
L'exemple suivant affiche uniquement le premier champ de chaque ligne du fichier /etc/passwd en utilisant le délimiteur de champ :(deux-points). Dans ce cas, le 1er champ est le nom d'utilisateur. Le fichier
$ cut -d':' -f1 /etc/passwd root daemon bin sys sync games bala
5. Sélectionner plusieurs champs à partir d'un fichier
Vous pouvez également extraire plusieurs champs d'un fichier ou d'une sortie standard. L'exemple ci-dessous affiche le nom d'utilisateur et le répertoire personnel des utilisateurs dont le shell de connexion est "/bin/bash".
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 root:/root bala:/home/bala
Pour afficher la plage de champs, spécifiez le champ de début et le champ de fin comme indiqué ci-dessous. Dans cet exemple, nous sélectionnons les champs 1 à 4, 6 et 7
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash bala:x:1000:1000:/home/bala:/bin/bash
6. Sélectionner les champs uniquement lorsqu'une ligne contient le délimiteur
Dans notre exemple /etc/passwd, si vous passez un délimiteur différent de :(deux-points), cut affichera simplement la ligne entière.
Dans l'exemple suivant, nous avons spécifié le délimiteur comme | (tuyau), et la commande cut affiche simplement la ligne entière, même lorsqu'elle ne trouve aucune ligne contenant | (tuyau) comme délimiteur.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -f1 root:x:0:0:root:/root:/bin/bash bala:x:1000:1000:bala,,,:/home/bala:/bin/bash
Mais, il est possible de filtrer et d'afficher uniquement les lignes qui contiennent le délimiteur spécifié en utilisant l'option -s.
L'exemple suivant n'affiche aucune sortie, car la commande cut n'a trouvé aucune ligne contenant | (pipe) comme délimiteur dans le fichier /etc/passwd.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7. Sélectionner tous les champs sauf les champs spécifiés
Afin de compléter la liste des champs de sélection, utilisez l'option –complément.
L'exemple suivant affiche tous les champs du fichier /etc/passwd sauf le champ 7
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7 root:x:0:0:root:/root bala:x:1000:1000:bala,,,:/home/bala
8. Modifier le délimiteur de sortie pour l'affichage
Par défaut, le délimiteur de sortie est le même que le délimiteur d'entrée que nous spécifions dans l'option cut -d.
Pour modifier le délimiteur de sortie, utilisez l'option –output-delimiter comme indiqué ci-dessous. Dans cet exemple, le délimiteur d'entrée est :(deux-points), mais le délimiteur de sortie est # (dièse).
$ grep "/bin/bash" /etc/passwd | cut -d':' -s -f1,6,7 --output-delimiter='#' root#/root#/bin/bash bala#/home/bala#/bin/bash
9. Remplacez le délimiteur de sortie par une nouvelle ligne
Dans cet exemple, chaque champ de la sortie de la commande de coupe est affiché sur une ligne distincte. Nous avons toujours utilisé –output-delimiter, mais la valeur est $'\n', ce qui indique que nous devons ajouter une nouvelle ligne comme délimiteur de sortie.
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n' bala /home/bala /bin/bash
10. Combiner Couper avec une autre sortie de commande Unix
La puissance de la commande cut peut être réalisée lorsque vous la combinez avec la sortie standard d'une autre commande Unix.
Une fois que vous maîtrisez l'utilisation de base de la commande de coupe que nous avons expliquée ci-dessus, vous pouvez utiliser judicieusement la commande de coupe pour résoudre bon nombre de vos besoins en matière de manipulation de texte.
L'exemple suivant indique comment extraire uniquement les informations utiles de la sortie de la commande ps. Nous avons également montré comment nous avons filtré la sortie de la commande ps en utilisant grep et sed avant que la sortie finale ne soit donnée à la commande cut. Ici, nous avons utilisé les options de coupe -d et -f que nous avons expliquées dans les exemples ci-dessus.
$ ps axu | grep python | sed 's/\s\+/ /g' | cut -d' ' -f2,11- 2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video 2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote 2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon 2463 /usr/bin/python /usr/lib/system-service/system-service-d 3274 grep --color=auto python