Commande Linux cut
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:
- Nom dutilisateur
- Mot de passe (affiché sous forme de x sil est chiffré)
- Numéro didentification de lutilisateur (UID)
- Numéro didentification du groupe (GID)
- Champ de commentaire (utilisé par la commande finger)
- Répertoire de base
- 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.