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 d'imprimer le résultat sur la sortie standard. Il peut être utilisé pour couper des parties d'une ligne par délimiteur, position d'octet et caractère.
Dans cet article, nous allons vous montrer comment utiliser le cut
commande à travers des exemples pratiques et des explications détaillées des options les plus courantes.
Comment utiliser la cut
Commande #
La syntaxe du cut
commande est la suivante :
cut OPTION... [FILE]...
Les options qui indiquent cut
s'il faut utiliser un délimiteur, une position d'octet ou un caractère lors de la découpe de portions sélectionnées, les lignes sont les suivantes :
-f
(--fields=LIST
) - Sélectionnez en spécifiant un champ, un ensemble de champs ou une plage de champs. Il s'agit de l'option la plus couramment utilisée.-b
(--bytes=LIST
) - Sélectionnez en spécifiant un octet, un ensemble d'octets ou une plage d'octets.-c
(--characters=LIST
) - Sélectionnez en spécifiant un caractère, un ensemble de caractères ou une plage de caractères.
Vous ne pouvez utiliser qu'une seule des options répertoriées ci-dessus.
Les autres options sont :
-d
(--delimiter
) - Spécifiez un délimiteur qui sera utilisé à la place du délimiteur "TAB" par défaut.--complement
- Compléter la sélection. Lors de l'utilisation de cette optioncut
affiche tous les octets, caractères ou champs à l'exception de la sélection.-s
(--only-delimited
) - Par défautcut
imprime les lignes qui ne contiennent aucun caractère délimiteur. Lorsque cette option est utilisée,cut
n'imprime pas les lignes ne contenant pas de délimiteurs.--output-delimiter
- Le comportement par défaut decut
est d'utiliser le délimiteur d'entrée comme délimiteur de sortie. Cette option vous permet de spécifier une chaîne de délimitation de sortie différente.
La cut
La commande peut accepter zéro ou plusieurs noms de FICHIER en entrée. Si pas de FILE
est spécifié, ou lorsque FILE
est -
, cut
lira à partir de l'entrée standard.
La LIST
argument passé au -f
, -b
, et -c
les options peuvent être un nombre entier, plusieurs nombres entiers séparés par des virgules, une plage de nombres entiers ou plusieurs plages de nombres entiers séparés par des virgules. Chaque plage peut être l'une des suivantes :
N
le Nième champ, octet ou caractère, en commençant par 1.N-
du Nième champ, octet ou caractère, jusqu'à la fin de la ligne.N-M
du Nième au Mième champ, octet ou caractère.-M
du premier au Mième champ, octet ou caractère.
Comment couper par champ #
Pour spécifier les champs qui doivent être coupés, appelez la commande avec le -f
option. Lorsqu'il n'est 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.txt245:789 4567 M:4540 Admin 01:10:1980
535:763 4987 M:3476 Sales 11:04:1978
Par exemple, pour afficher le 1er et le 3ème champ, vous utiliserez :
cut test.txt -f 1,3
245:789 M:4540
535:763 M:3476
Ou si vous souhaitez afficher du 1er au 4ème champ :
cut test.txt -f -4
245:789 4567 M:4540 Admin
535:763 4987 M:3476 Sales
Comment couper en fonction d'un délimiteur #
Pour couper en fonction d'un délimiteur, invoquez la commande avec le -d
option, suivi du délimiteur que vous souhaitez utiliser.
Par exemple, pour afficher les 1er et 3e champs en utilisant « :» comme délimiteur, vous saisirez :
cut test.txt -d ':' -f 1,3
245:4540 Admin 01
535:3476 Sales 11
Vous pouvez utiliser n'importe quel caractère comme délimiteur. Dans l'exemple suivant, nous utilisons le caractère espace comme délimiteur et imprimons le 2ème champ :
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum
Comment compléter la sélection #
Pour compléter la liste des champs de sélection, utilisez --complement
option. Cela n'imprimera que les champs qui ne sont pas sélectionnés avec le -f
option.
La commande suivante imprimera tous les champs sauf le 1er et le 3ème :
cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980
4987 Sales 11:04:1978
Comment spécifier un délimiteur de sortie #
Pour spécifier le délimiteur de sortie, utilisez le --output-delimiter
option. Par exemple, pour définir le délimiteur de sortie sur _
vous utiliseriez :
cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540
535:763_M:3476
Comment couper par octets et caractères #
Avant d'aller plus loin, faisons une distinction entre les octets et les 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 l'anglais. 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 à l'échelle mondiale, les entreprises technologiques ont commencé à introduire de nouveaux encodages de caractères pour différentes langues. Pour les langues qui ont plus de 256 caractères, un simple mappage 1 à 1 n'était pas possible. Cela conduit à différents problèmes tels que le partage de documents ou la navigation sur des sites Web, et une nouvelle norme 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.
Le -b
(--bytes
) indique à la commande de couper des sections de chaque ligne spécifiée par des positions d'octet données.
Dans les exemples suivants, nous utilisons le ü
caractère qui prend 2 octets.
Sélectionnez le 5ème octet :
echo 'drüberspringen' | cut -b 5
b
Sélectionnez les 5e, 9e et 13e octets :
echo 'drüberspringen' | cut -b 5,9,13
bpg
Sélectionnez la plage du 1er au 5ème octet :
echo 'drüberspringen' | cut -b 1-5
drüb
Au moment de la rédaction de cet article, la version de cut
fourni dans GNU coreutils n'a pas la possibilité de couper par caractères. Lors de l'utilisation du -c
option, cut
se comporte de la même manière que lors de l'utilisation de -b
option.
Exemples de coupe #
La cut
La commande est généralement utilisée en combinaison avec d'autres commandes via la tuyauterie. Voici quelques exemples :
Obtenir une liste de tous les utilisateurs #
La sortie du getent passwd
la commande est passée à cut
, qui imprime le 1er champ en utilisant :
comme délimiteur.
getent passwd | cut -d ':' -f1
La sortie affiche une liste de tous les utilisateurs du système.
Afficher les 10 commandes les plus fréquemment utilisées #
Dans l'exemple suivant, cut
est utilisé pour supprimer les 8 premiers octets de chaque ligne de l'history
sortie de la commande.
history | cut -c8- | sort | uniq -c | sort -rn | head
Conclusion #
cut
La commande est utilisée pour afficher les champs sélectionnés à partir de chaque ligne de fichiers donnés ou de l'entrée standard.
Bien que très utile, cut
a quelques limites. Il ne prend pas en charge la spécification de plus d'un caractère comme délimiteur et il ne prend pas en charge plusieurs délimiteurs.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.