Extraire une colonne d’un CSV, isoler un login dans /etc/passwd, nettoyer la sortie d’un script bash avant de l’envoyer dans un autre outil… Sur un système Linux, la commande cut sert exactement à ça : découper du texte en ligne de commande, de façon rapide, prévisible, sans sortir un parseur JSON ou un script Python pour trois champs à trier. L’outil fait partie de coreutils, donc présent par défaut sur pratiquement toutes les distributions. Une fois maîtrisé, il devient un réflexe dans n’importe quel shell, que ce soit pour du dépannage ponctuel ou pour du traitement de texte automatisé dans un script.
Dans le quotidien d’un admin ou d’un développeur, beaucoup d’actions reviennent à manipuler des lignes : journaux applicatifs, fichiers de configuration, sorties de commandes système, exports CSV issus d’un autre service. À force de bricoler, on finit souvent par empiler awk, sed, grep et compagnie. La commande cut Linux occupe une niche très précise dans cet arsenal : extraire des octets, des caractères ou des champs délimités, sans s’occuper du reste. Ce texte propose une série d’exemples pratiques autour de cut, en situation réelle, pour aider à structurer des pipelines bash lisibles et maintenables, utiles aussi bien en prod que dans un homelab.
En bref
- cut permet d’extraire des octets, des caractères ou des champs délimités dans un fichier ou un flux standard, idéal pour découper du texte en ligne de commande.
- La syntaxe tourne autour d’options simples : -b pour les octets, -c pour les caractères, -d/-f pour les champs, avec une logique de listes et de plages.
- Sur des fichiers comme /etc/passwd ou des CSV, cut rend les scripts bash plus lisibles que des constructions awk inutiles.
- Des options moins connues comme –complement et –output-delimiter évitent parfois de passer par d’autres outils de traitement de texte.
- Dans un pipeline, cut se marie bien avec grep, sort, head, tailf ou encore des commandes d’admin comme useradd.
Commande cut Linux et bases pour découper du texte en ligne de commande
La commande cut accepte des fichiers en argument, mais peut aussi lire sur l’entrée standard. La forme minimale ressemble à ceci :
cut OPTION… [FICHIER]…
Sans fichier, cut consomme ce qui arrive via un pipe. C’est souvent le cas dans un script bash qui enchaîne plusieurs outils système.
Options essentielles de cut en shell Linux
Pour travailler efficacement, il faut maîtriser quelques drapeaux clés. Le tableau ci-dessous résume les options vraiment utiles dans 90 % des cas.
| Option | Rôle principal | Exemple rapide |
|---|---|---|
| -b LISTE | Sélection d’octets par positions | cut -b 1-3,7 fichier.log |
| -c LISTE | Sélection de caractères par positions | echo « Bonjour » | cut -c 1-3 |
| -d DELIM | Délimiteur de champs (par défaut : tabulation) | cut -d’:’ -f 1 /etc/passwd |
| -f LISTE | Sélection de champs | cut -d’,’ -f 2-4 data.csv |
| -n | Évite de couper au milieu de caractères multioctets | cut -n -b 1-10 fichier.txt |
| –complement | Inverse la sélection (affiche tout sauf la liste) | cut –complement -c 1-5 texte.txt |
| –output-delimiter=CAR | Change le séparateur de sortie | cut -d’;’ -f 1,2 –output-delimiter=’,’ |
Les notations de LISTE suivent un schéma simple :
- 1,3,7 pour des positions isolées.
- 2-5 pour une plage continue.
- 3- pour « de la 3e position à la fin de ligne ».
- -4 pour « du début de ligne jusqu’à la 4e position ».
Exemples pratiques de cut sur des fichiers système
Sur les systèmes Linux classiques, le fichier /etc/passwd reste un terrain d’entraînement utile. Chaque ligne est découpée par des deux-points et le premier champ contient le nom du compte.
- Liste simple des utilisateurs locaux : cut -d’:’ -f 1 /etc/passwd.
- Nom et répertoire personnel : cut -d’:’ -f 1,6 /etc/passwd.
- Champs 1 à 4 pour un aperçu rapide : cut -d’:’ -f 1-4 /etc/passwd.
Dans un script de création de comptes, ce genre de commande permet par exemple de vérifier qu’un login n’existe pas déjà avant d’appeler useradd. Aucun besoin de parser ça en Python ou Perl, cut fait le travail proprement.
Pour prendre en main toutes les variantes disponibles sur un système donné, un passage par cut –help ou cut –version reste utile, notamment pour repérer les options spécifiques à la version de coreutils déployée.
Cette base pose le décor. La suite va montrer comment cut se comporte avec des champs et des délimiteurs personnalisés, contexte où l’on commence réellement à gagner du temps.

Découper des champs avec cut, délimiteurs et pièges classiques
Le mode de fonctionnement le plus utilisé de cut consiste à extraire des champs dans une ligne, avec un séparateur explicite. C’est le duo -d/-f qui s’en charge. Sur un CSV, un fichier séparé par des points-virgules ou un retour de commande formaté, ce couple suffit largement.
cut -d et -f pour les fichiers de type CSV
Imaginons un fichier serveurs.csv qui contienne :
nom;ip;role;environnement
Pour extraire seulement le nom et l’adresse IP, la commande reste très lisible :
cut -d’;’ -f 1,2 serveurs.csv
Quelques variantes fréquentes en production :
- Limiter les colonnes pour un export vers un autre outil.
- Préparer une liste de cibles à injecter dans un script de supervision.
- Isoler une clé primaire ou un identifiant métier dans un fichier généré par une application.
Ce mode de découpe se combine bien avec des commandes comme sort ou uniq pour nettoyer des doublons, ou avec des outils de monitoring. Un administrateur qui surveille des logs en temps réel avec la commande décrite sur tailf peut, par exemple, insérer cut au milieu de la chaîne pour ne garder que certains champs des lignes affichées.
Attention au délimiteur espace avec cut en shell
Un piège classique concerne l’utilisation de l’espace comme séparateur. Prenons la ligne :
echo « Bonjour à tous, ici Adrien » | cut -d’ ‘ -f3
À cause des espaces multiples, le troisième « champ » selon cut ne contient rien. Si la même chaîne est transformée en remplaçant les espaces par des deux-points, on obtient une série de deux-points consécutifs qui révèlent la présence de champs vides. C’est la même logique que celle rencontrée quand un CSV contient des valeurs manquantes entre deux séparateurs.
Face à ce genre de format instable, trois réponses possibles :
- Remplacer les répétitions d’espaces par un unique séparateur robuste avant d’appeler cut.
- Basculer sur un outil plus souple comme awk pour ce cas précis.
- Exiger des exports propres côté application, ce qui est souvent le vrai sujet.
Persister à utiliser cut sur un format bancal conduit à des scripts fragiles, qui cassent dès qu’une équipe modifie un message de log ou une chaîne de statut.
Changer le séparateur de sortie avec –output-delimiter
Par défaut, cut réutilise le même séparateur pour sa sortie. Ce comportement ne convient pas toujours, par exemple lorsqu’un pipeline doit transformer un fichier séparé par des espaces en CSV avec des virgules. L’option –output-delimiter vient régler le problème :
cut -d’ ‘ -f 1,2 –output-delimiter=’,’ stats.txt
Cette commande sort les deux premiers champs, séparés par une virgule, sans étape de remplacement supplémentaire.
| Scénario | Commande cut | Commentaire |
|---|---|---|
| Extraction de colonnes CSV | cut -d’;’ -f 1-3 data.csv | Garde les trois premières colonnes pour un export simplifié. |
| Nettoyage de champs avant import | cut -d’,’ -f 1,4 –output-delimiter=’;’ | Prépare un fichier adapté à un outil acceptant seulement « ; ». |
| Transformation d’une liste technique | cut -d’ ‘ -f 1 | sort -u | Extrait la première colonne puis supprime les doublons. |
Un pipeline de production gagne beaucoup en lisibilité quand la transformation des champs reste explicite, plutôt que noyée dans des expressions régulières opaques. cut est adapté à cette transparence.
Une fois à l’aise avec les champs, la question des positions brutes d’octets et de caractères se pose, surtout quand il s’agit de tronquer des journaux ou de minimiser la quantité de texte conservé pour des raisons de stockage ou de confidentialité.
Utiliser cut pour les octets et caractères, cas réels et limites
Les options -b et -c de cut s’occupent des positions fixes. Dans un environnement où l’on manipule encore des formats hérités, voire des fichiers de logs à colonnes alignées, ces deux options passent régulièrement.
Découper par octets avec -b en ligne de commande
L’option -b sélectionne des octets. Sur un fichier ASCII simple, cela revient souvent à sélectionner des caractères, mais dès que l’on touche à l’UTF‑8 ou à d’autres encodages, un caractère peut s’étaler sur plusieurs octets. D’où l’intérêt de l’option -n qui évite d’interrompre une séquence multioctets.
Quelques exemples typiques :
- cut -b 1-20 application.log pour afficher seulement les 20 premiers octets de chaque ligne.
- cut -n -b 1-80 trame.bin pour découper en colonnes sans couper les caractères multi-octets.
- cut -b -50 erreurs.log pour tronquer les lignes en ne gardant que les 50 premiers octets.
Ce dernier usage est pratique pour limiter la taille de fichiers qui deviennent pénibles à parcourir, surtout lorsqu’on les ouvre dans des outils qui peinent sur des lignes interminables.
Travailler au caractère près avec -c
L’option -c raisonne en caractères, ce qui reste plus intuitif pour la plupart des usages. Par exemple :
echo « Bonjour à tous, ici Adrien » | cut -c 1-9
Cette commande garde les neuf premiers caractères de la chaîne. La même logique que pour -b s’applique : 1,3 pour des positions isolées, 2- pour « du 2e caractère à la fin », -15 pour « du début jusqu’au 15e caractère ».
| Objectif | Commande cut | Effet |
|---|---|---|
| Extraire la première lettre de chaque ligne | cut -c 1 noms.txt | Affiche une initiale par ligne. |
| Masquer une partie sensible | cut –complement -c 5-12 logins.txt | Supprime les caractères de la 5e à la 12e position. |
| Limiter la longueur affichée | cut -c -80 requetes.log | Évite les lignes trop longues dans le terminal. |
Dans un script qui anonymise un export avant de le transmettre à un prestataire, cette approche reste pertinente, même si pour des besoins sérieux de confidentialité, un traitement dédié sera préférable.
Positions, multi-octets et choix d’outil
Dès qu’une application manipule des alphabets variés, des émojis ou des caractères accentués, l’écart entre octets et caractères devient visible. coupler cut avec iconv ou vérifier l’encodage du fichier via file permet de réduire les erreurs. Le réflexe correct consiste à rester sur -c dès que l’on travaille sur des chaînes lisibles par un humain, et à réserver -b aux formats vraiment binaires ou aux colonnes strictement positionnées.
Sur un incident de sécurité VMware décrit sur cette page, par exemple, l’analyse des journaux passe par un tri grossier puis une extraction de quelques caractères significatifs sur chaque ligne. Dans ces cas-là, choisir entre -b et -c n’est pas un détail, surtout lorsqu’on compare des indices de temps ou des identifiants générés automatiquement.
Une fois ce mode « positionnel » apprivoisé, la combinaison de toutes ces variantes avec la sélection de champs et les compléments ouvre une palette de filtres suffisante pour énormément de scripts métier.
Complément, inversion de sélection et combinaisons avancées de cut
La plupart des tutoriels se limitent aux champs et aux colonnes. Pourtant, les options comme –complement ou l’enchaînement de plusieurs modes transforment cut en petit couteau suisse pour le tri de logs et l’extraction de données.
Inverser la sélection avec –complement
L’option –complement inverse la logique de cut. Au lieu d’afficher ce qui se trouve dans la liste, la commande renvoie tout sauf cette liste. Exemple immédiat :
cut –complement -d’ ‘ -f 1 erreur.log
La commande masque la première colonne de chaque ligne, ce qui peut servir à supprimer un préfixe de timestamp ou un identifiant de serveur dans un cluster. Sur certains fichiers, cela nettoie l’affichage sans toucher à la structure de la ligne.
- cut –complement -c 1-4 trace.txt pour supprimer un code de statut fixe.
- cut –complement -d’;’ -f 2,3 stats.csv pour enlever deux colonnes inutiles.
- cut –complement -b -10 brute.log pour retirer un préfixe technique imposé par un middleware.
Ce renversement évite parfois d’énumérer tous les champs intéressants dès que l’on a seulement une ou deux colonnes à masquer. Dans un script maintenu collectivement, cette lisibilité compte.
Enchaîner les découpes et filtrages dans un pipeline shell
Les choses deviennent réellement utiles dès qu’on insère cut dans une chaîne de traitement. Un exemple simple :
cat state.txt | cut -d’ ‘ -f 1 | sort -r
Les noms de région ou de machine sont d’abord extraits avec cut, puis triés à rebours. Probablement plus lisible qu’une commande awk plus cryptique. On peut pousser un peu plus :
cat state.txt | head -n 3 | cut -d’ ‘ -f 1 > liste.txt
Ce pipeline lit le fichier, garde seulement les trois premières lignes via head, isole le premier champ avec cut, puis redirige le tout dans un nouveau fichier. Ce pattern se retrouve souvent dans des scripts d’export temporaire ou des analyses rapides.
| Chaîne de commandes | Rôle de cut | Cas d’usage |
|---|---|---|
| journalctl | cut -c 1-80 | Tronque les lignes pour le terminal | Lecture rapide des journaux sans scroll horizontal. |
| ps aux | cut -c 1-40 | Limite l’affichage au début des lignes | Vue condensée des processus pour un diagnostic express. |
| tail -f app.log | cut -d’ ‘ -f 5- | Masque le timestamp et le niveau de log | Focalisation sur le message applicatif. |
Dans des environnements contraints, où l’on ouvre encore parfois un terminal depuis une session RDP vieillissante ou un shell sur une VM Windows déjà bien chargée, ce type d’optimisation rend les analyses moins fatigantes. Sur cette page dédiée au manque de place disque sous Windows, on retrouve le même réflexe de réduction de volume : trier, filtrer, limiter, plutôt que tout stocker et tout afficher.
Quand cut n’est pas le bon outil
À force d’apprécier la simplicité de cut, certains finissent par l’utiliser pour tout. Mauvaise idée. Dès que le format devient hiérarchique (JSON, XML, YAML) ou que les délimitations reposent sur des patterns complexes, cut n’est plus adapté. Continuer dans cette direction mène à des scripts fragiles, voire à des erreurs d’interprétation des données, ce qui peut avoir des conséquences sérieuses en sécurité ou en facturation.
Un autre point concerne les environnements non Linux, en particulier certains systèmes Windows bricolés avec des couches d’outils tiers. Des pratiques douteuses comme celles évoquées autour de Windows Loader rappellent déjà qu’empiler des workarounds opaques finit toujours par se retourner contre l’admin. Les scripts autour de cut doivent rester tracés, commentés, et intégrés dans des processus propres.
Une fois ce filtre mental posé, cut garde toute sa valeur : un outil simple, clair, pour des formats simples, clairs. Le reste relève d’autres briques.
Comment fonctionne la syntaxe des listes avec cut sous Linux ?
La plupart des options de cut (-b, -c, -f) acceptent une LISTE de positions. On peut y placer des numéros séparés par des virgules (1,3,7), des plages avec un tiret (2-5) ou des bornes ouvertes (3- pour « depuis 3 jusqu’à la fin », -4 pour « du début à 4 »). Ces schémas sont combinables dans la même commande, ce qui permet par exemple un cut -c 1-5,10,15- pour extraire plusieurs segments d’une même ligne.
Quelle différence entre les options -b et -c de la commande cut ?
L’option -b sélectionne des octets, sans se soucier de l’encodage. Un caractère UTF‑8 peut donc être coupé en plein milieu si l’on ne fait pas attention. L’option -c raisonne en caractères, ce qui reste plus adapté pour du texte lisible. Quand des caractères multioctets sont présents, -c garantit qu’aucun symbole ne sera tronqué. On réserve généralement -b aux formats strictement positionnés ou aux données binaires.
Comment découper des champs délimités avec des points-virgules ou des virgules ?
Pour extraire des champs séparés par un caractère donné, il faut combiner -d et -f. Par exemple, pour un fichier CSV avec des points-virgules, on peut utiliser cut -d’;’ -f 1,3 fichier.csv. La commande prend le caractère fourni à -d comme séparateur, puis renvoie les champs dont les index sont listés dans -f. Le même principe fonctionne pour les virgules, les deux-points, etc.
À quoi sert l’option –complement dans cut Linux ?
L’option –complement inverse la sélection. Au lieu d’afficher les champs, octets ou caractères spécifiés, cut renvoie tous les autres. Par exemple, cut –complement -d’:’ -f 1 /etc/passwd affichera tout sauf le premier champ. Cela évite d’énumérer une liste parfois longue de champs à garder, notamment quand on veut simplement en retirer un ou deux.
Quand vaut-il mieux utiliser awk plutôt que cut pour traiter du texte ?
cut convient aux formats très réguliers, avec un seul séparateur simple ou des positions fixes. Dès que le découpage dépend d’une logique conditionnelle, de plusieurs séparateurs, de tests sur la valeur des champs ou de calculs, awk devient plus approprié. awk gère aussi mieux les espaces multiples et les cas où le séparateur ne suffit pas à décrire correctement la structure de la ligne.