Commande Linux cut

Mise à jour: 05/04/2019 par Computer Hope

Sous Unix -comme les systèmes dexploitation, la commande cut supprime (« coupe ») des sections de chaque ligne dun ou plusieurs fichiers.

Ce document couvre la version GNU / Linux de cut.

Syntaxe

cut OPTION... ...

Options

-b, –bytes = LIST Sélectionnez uniquement les octets de chaque ligne comme spécifié dans LIST. LIST spécifie un octet, un ensemble doctets ou une plage doctets; voir Spécification de LIST ci-dessous.
-c, –characters = LIST Sélectionnez uniquement les caractères de chaque ligne comme spécifié dans LIST. LIST spécifie un caractère, un ensemble de caractères ou une plage de caractères; voir Spécification de LIST ci-dessous.
-d, –delimiter = DELIM utilise le caractère DELIM au lieu dune tabulation pour le délimiteur de champ.
-f, –fields = LISTE sélectionnez uniquement ces champs sur chaque ligne; affiche également toute ligne qui ne contient aucun caractère de délimitation, sauf si loption -s est spécifiée. LIST spécifie un champ, un ensemble de champs ou une plage de champs; voir Spécification de LIST ci-dessous.
-n Cette option est ignorée, mais est incluse pour des raisons de compatibilité.
–complement complète lensemble des octets, caractères ou champs sélectionnés.
-s, –only-delimited nimprime pas les lignes ne contenant pas de délimiteurs.
–output-delimiter = STRING utilise STRING comme chaîne de délimitation de sortie. La valeur par défaut est dutiliser le délimiteur dentrée.
–help Afficher un message daide et quitter.
–version afficher les informations de version et quitter.

Notes dutilisation

Lors de lappel de cut, utilisez loption -b, -c ou -f, mais une seule dentre elles.

Si aucun FICHIER nest spécifié, coupe les lectures à partir de lentrée standard.

Spécification de la LISTE

Chaque LISTE est composée dun entier, dune plage dentiers ou de plusieurs plages dentiers séparés par des virgules. Lentrée sélectionnée est écrite dans le même ordre où elle est lue et est écrite dans la sortie exactement une fois. Une plage se compose de:

Par exemple, disons que vous avez un fichier nommé data.txt qui contient le texte suivant:

onetwothreefourfivealphabetagammadeltaepsilon

Dans cet exemple, chacun de ces mots est séparé par un caractère de tabulation et non par des espaces. Le caractère de tabulation est le délimiteur par défaut de couper, donc il considérera par défaut un champ comme tout ce qui est délimité par une tabulation.

Pour « couper » uniquement le troisième champ de chaque ligne, utilisez la commande:

cut -f 3 data.txt

… qui affichera ce qui suit:

threegamma

Si à la place vous voulez « couper » uniquement le deuxième au quatrième champ de chaque ligne, utilisez la commande:

cut -f 2-4 data.txt

… qui affichera ce qui suit:

twothreefourbetagammadelta

Si vous voulez » couper « uniquement le premier à travers- deuxième et quatrième à cinquième champs de chaque ligne (en omettant le troisième champ), utilisez la commande:

cut -f 1-2,4-5 data.txt

… qui affichera ce qui suit:

onetwofourfivealphabetadeltaepsilon

Ou disons que vous veulent le troisième champ et tous les champs après lui, en omettant les deux premiers champs. Dans ce cas, vous pouvez utiliser la commande:

cut -f 3- data.txt

… qui affichera ce qui suit:

threefourfivegammadeltaepsilon

La spécification dune plage avec LIST sapplique également à la découpe de caractères (-c) ou doctets (-b) dune ligne. Par exemple, pour afficher uniquement le troisième à douzième caractère de chaque ligne de data.txt, utilisez la commande:

cut -c 3-12 data.txt

… qui affichera ce qui suit:

etwothrephabetag

Noubliez pas que l « espace » entre chaque mot est en fait un seul caractère de tabulation, donc les deux lignes de sortie affichent dix caractères: huit caractères alphanumériques et deux caractères de tabulation. En dautres termes, couper consiste à omettre les deux premiers caractères de chaque ligne, comptant les tabulations comme un caractère chacun; sortie des caractères de trois à douze, en comptant les tabulations comme un caractère chacun; et en omettant tous les caractères après le douzième.

Le comptage doctets au lieu de caractères donnera le même résultat dans ce cas, car dans un fichier texte encodé en ASCII, chaque caractère est représenté par un seul octet (huit bits ) de données. Ainsi, la commande:

cut -b 3-12 data.txt

… produira, pour notre fichier data.txt, exactement le même résultat:

etwothrephabetag

Spécification dun délimiteur autre quune tabulation

Le caractère de tabulation est le délimiteur par défaut utilisé par cut pour déterminer ce qui constitue un champ. Donc, si les champs de votre fichier sont déjà délimités par des tabulations, vous navez pas besoin de spécifier un caractère de délimitation différent.

Vous pouvez cependant spécifier nimporte quel caractère comme délimiteur.Par exemple, le fichier / etc / passwd contient des informations sur chaque utilisateur du système, un utilisateur par ligne, et chaque champ dinformations est délimité par deux points (« : »). Par exemple, la ligne de / etc / passwd pour lutilisateur root peut ressembler à ceci:

root:x:0:0:root:/root:/bin/bash

Ces champs contiennent les informations suivantes, dans lordre suivant, séparés par un caractère deux-points:

  1. Nom dutilisateur
  2. Mot de passe (affiché sous forme de x sil est chiffré)
  3. Numéro didentification de lutilisateur (UID)
  4. Numéro didentification du groupe (GID)
  5. Champ de commentaire (utilisé par la commande finger)
  6. Répertoire de base
  7. Shell

Le nom dutilisateur est le premier champ sur la ligne, donc pour afficher chaque nom dutilisateur sur le système, utilisez la commande:

cut -f 1 -d ":" /etc/passwd

… qui affichera , par exemple:

rootdaemonbinsyschope

(Il y a beaucoup plus de comptes utilisateur sur un système typique, y compris de nombreux comptes spécifiques aux services système, mais pour cet exemple nous ferons semblant il ny a que cinq utilisateurs.)

Le troisième champ de chaque ligne du fichier / etc / passwd est lUID (numéro dID utilisateur), donc pour afficher chaque nom dutilisateur et numéro dID utilisateur, utilisez la commande:

… qui affichera ce qui suit, par exemple:

root:0daemon:1bin:2sys:3chope:1000

Comme vous pouvez le voir, la sortie sera délimité, par défaut, en utilisant le même caractère de délimitation spécifié pour lentrée. Dans ce cas, il sagit du caractère deux-points (« : »). Vous pouvez toutefois spécifier un séparateur différent pour lentrée et la sortie. Donc, si vous souhaitez exécuter la commande précédente, mais que la sortie est délimitée par un espace, vous pouvez utiliser la commande:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

Mais que faire si vous voulez que la sortie soit délimitée par une tabulation ? Spécifier un caractère de tabulation sur la ligne de commande est un peu plus compliqué, car il sagit dun caractère non imprimable. Pour le spécifier sur la ligne de commande, vous devez le « protéger » du shell. Cela se fait différemment selon le shell que vous  » vous utilisez, mais dans le shell par défaut de Linux (bash), vous pouvez spécifier le caractère de tabulation avec $ « \ t ». Ainsi, la commande:

cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

… affichera ce qui suit, par exemple:

root0daemon1bin2sys3chope1000

Exemples

cut -c 3 file.txt

Affiche le troisième caractère de chaque ligne du fichier file.txt, en omettant les autres.

cut -c 1-3 file.txt

Affiche les trois premiers caractères de chaque ligne du fichier file.txt, en omettant le reste.

cut -c -3 file.txt

Identique à la commande ci-dessus. Affiche les trois premiers caractères de chaque ligne du fichier.txt.

cut -c 3- file.txt

Affiche le troisième au dernier caractère de chaque ligne du fichier file.txt, en omettant les deux premiers caractères.

cut -d ":" -f 1 /etc/passwd

Affiche le premier champ du fichier / etc / passwd, où les champs sont délimités par deux-points (« : »). Le premier champ de / etc / passwd est le nom dutilisateur, donc cette commande affichera chaque nom dutilisateur dans le fichier passwd.

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

Affiche les premier et sixième champs, délimité par deux-points, de toute entrée du fichier / etc / passwd qui spécifie / bin / bash comme shell de connexion. Cette commande affichera le nom dutilisateur et le répertoire personnel de tout utilisateur dont le shell de connexion est / bin / bash.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *