Commande Cut sous Linux

Il existe de nombreux utilitaires disponibles dans les systèmes Linux et Unix qui vous permettent de traiter et de filtrer les fichiers texte. cut est un utilitaire de ligne de commande qui vous permet de couper des parties de lignes à partir de fichiers spécifiés ou de données canalisées et dimprimer le résultat sur la sortie standard. Il peut être utilisé pour couper des parties dune ligne par délimiteur, position doctet et caractère.

Dans cet article, nous allons vous montrer comment utiliser le cut à travers des exemples pratiques et des explications détaillées sur les options les plus courantes.

Comment utiliser la commande cut #

La syntaxe de la cut commande est la suivante:

Les options qui indiquent à cut sil faut utiliser un délimiteur, une position doctet ou un caractère lors de la découpe de portions sélectionnées, les lignes sont les suivantes:

Vous pouvez utiliser une, et une seule des options répertoriées ci-dessus.

Dautres options sont :

  • -d (--delimiter) – Spécifiez un délimiteur qui sera utilisé à la place de la valeur par défaut  » Délimiteur TAB ”.
  • --complement – Compléter la sélection. Lorsque vous utilisez cette option, cut affiche tous les octets, caractères, ou des champs sauf le se lected.
  • -s (--only-delimited) – Par défaut cut imprime les lignes qui ne contiennent aucun caractère de délimitation. Lorsque cette option est utilisée, cut nimprime pas les lignes ne contenant pas de délimiteurs.
  • --output-delimiter – Le comportement par défaut de cut consiste à utiliser le délimiteur dentrée comme délimiteur de sortie. Cette option vous permet de spécifier une chaîne de délimitation de sortie différente.

La commande cut peut accepter zéro ou plusieurs noms de FICHIER dentrée. Si aucun FILE nest spécifié, ou lorsque FILE est -, cut lira à partir de lentrée standard.

Largument LIST passé à -f , les options -b et -c peuvent être un entier, plusieurs entiers séparés par des virgules, une plage dentiers ou plusieurs plages dentiers séparés par des virgules . Chaque plage peut être lune des suivantes:

  • N le Nième champ, octet ou caractère, à partir de 1.
  • N- du Nième champ, octet ou caractère, à la fin de la ligne.
  • N-M du Nième au Mème champ, octet ou caractère.
  • -M du premier au Mème champ, octet ou caractère.

Comment couper par champ #

Pour spécifier les champs à couper, appelez la commande avec loption -f. Lorsquil nest pas spécifié, le délimiteur par défaut est « TAB ».

Dans les exemples ci-dessous, nous utiliserons le fichier suivant. Les champs sont séparés par des tabulations.

test.txt

Par exemple, pour afficher le 1er et le 3ème champ, vous utiliseriez:

Ou si vous souhaitez afficher du 1er au 4e champ:

Comment couper en fonction dun délimiteur #

Pour couper en fonction dun délimiteur, appelez la commande avec -d, suivie du délimiteur que vous souhaitez utiliser.

Par exemple, pour afficher les 1er et 3ème champs en utilisant « : » comme délimiteur, vous devez taper:

Vous pouvez utiliser nimporte quel caractère unique comme délimiteur. Dans lexemple suivant, nous utilisons le caractère espace comme séparateur et imprimons le 2ème champ:

Comment compléter la sélection #

Pour compléter la liste des champs de sélection, utilisez loption --complement. Cela nimprimera que les champs qui ne sont pas sélectionnés avec loption -f.

La commande suivante imprimera tous les champs sauf le 1er et le 3ème:

Comment spécifier un délimiteur de sortie #

Pour spécifier le délimiteur de sortie, utilisez --output-delimiter. Par exemple, pour définir le délimiteur de sortie sur _, vous utiliseriez:

Comment couper par octets et caractères #

Avant daller plus loin, faisons une distinction entre octets et caractères.

Un octet correspond à 8 bits et peut représenter 256 valeurs différentes. Lorsque la norme ASCII a été établie, elle a pris en compte toutes les lettres, chiffres et symboles nécessaires pour travailler avec langlais. La table de caractères ASCII comporte 128 caractères et chaque caractère est représenté par un octet.Lorsque les ordinateurs ont commencé à devenir accessibles dans le monde entier, les entreprises technologiques ont commencé à introduire de nouveaux encodages de caractères pour différentes langues. Pour les langues de plus de 256 caractères, un simple mappage 1 à 1 nétait pas possible. Cela entraîne différents problèmes tels que le partage de documents ou la navigation sur des sites Web, et un nouveau standard Unicode capable de gérer la plupart des systèmes d’écriture du monde était nécessaire. UTF-8 a été créé pour résoudre ces problèmes. En UTF-8, tous les caractères ne sont pas représentés avec 1 octet. Les caractères peuvent être représentés avec 1 octet à 4 octets.

Loption -b (--bytes) indique à la commande de couper des sections de chaque ligne spécifiée par des positions doctets données.

Dans les exemples suivants, nous utilisons le caractère ü qui prend 2 octets.

Sélectionnez le 5ème octet:

Sélectionnez les 5ème, 9ème et 13ème octets:

Sélectionnez la plage du 1er au 5e octet:

Au moment de la rédaction de cet article, la version de cut intégrée dans GNU coreutils na pas une option pour couper par caractères. Lorsque vous utilisez loption -c, cut se comporte de la même manière que lorsque vous utilisez loption -b.

Exemples de coupe #

La commande cut est généralement utilisée en combinaison avec dautres commandes via la tuyauterie. Voici quelques exemples:

Obtenir une liste de tous les utilisateurs #

Le résultat de la commande getent passwd est passé à cut, qui imprime le premier champ en utilisant : comme délimiteur.

La sortie affiche une liste de tous les utilisateurs du système.

Afficher les 10 commandes les plus fréquemment utilisées #

Dans lexemple suivant, cut est utilisé pour supprimer les 8 premiers octets de chaque ligne de la sortie de la commande history.

Conclusion #

cut est utilisée pour afficher les champs sélectionnés de chaque ligne de fichiers donnés ou de lentrée standard.

Bien que très utile, cut présente certaines limitations. Il ne prend pas en charge la spécification de plus dun caractère comme délimiteur et il ne prend pas en charge plusieurs délimiteurs.

Laisser un commentaire

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