<Précédent | Table des matières | Suivant>
cut
Le cut Le programme est utilisé pour extraire une section de texte d'une ligne et afficher la section extraite sur la sortie standard. Il peut accepter plusieurs arguments de fichier ou une entrée à partir d'une entrée standard.
La spécification de la section de la ligne à extraire est quelque peu délicate et est spécifiée à l'aide des options suivantes :
Tableau 20-3 : Options de sélection de coupe
Description des options
Description des options
-c liste_char Extraire la portion de ligne définie par liste_char. La liste peut consister en une ou plusieurs plages numériques séparées par des virgules.
-f liste de champ Extraire un ou plusieurs champs de la ligne tel que défini par
liste de champ. La liste peut contenir un ou plusieurs champs ou plages de champs séparés par des virgules.
-d délim_char Quand -f est spécifié, utilisez délim_char comme caractère de délimitation de champ. Par défaut, les champs doivent être séparés par un seul caractère de tabulation.
--complement Extraire toute la ligne de texte, à l'exception de ces portions
spécifié par -c (facultatif) -f.
Comme on peut le voir, le chemin cut extrait le texte est plutôt rigide. cut est mieux utilisé pour extraire du texte à partir de fichiers produits par d'autres programmes, plutôt que du texte directement tapé par des humains. Nous allons jeter un oeil à notre distributions.txt fichier pour voir s'il est assez "propre" pour être un bon spécimen pour notre cut exemples. Si nous utilisons cat des -A option, nous pouvons voir si le fichier répond à nos exigences de champs séparés par des tabulations :
[moi@linuxbox ~]$ chat -A distributions.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
[moi@linuxbox ~]$ chat -A distributions.txt
SUSE^I10.2^I12/07/2006$
Fedora^I10^I11/25/2008$ SUSE^I11.0^I06/19/2008$
Ubuntu^I8.04^I04/24/2008$ Fedora^I8^I11/08/2007$ SUSE^I10.3^I10/04/2007$
Ubuntu^I6.10^I10/26/2006$ Fedora^I7^I05/31/2007$ Ubuntu^I7.10^I10/18/2007$ Ubuntu^I7.04^I04/19/2007$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
SUSE^I10.1^I05/11/2006$
Fedora^I6^I10/24/2006$ Fedora^I9^I05/13/2008$ Ubuntu^I6.06^I06/01/2006$ Ubuntu^I8.10^I10/30/2008$ Fedora^I5^I03/20/2006$
Ça à l'air bon. Pas d'espaces intégrés, juste des tabulations simples entre les champs. Étant donné que le fichier utilise des tabulations plutôt que des espaces, nous utiliserons le -f option pour extraire un champ :
[moi@linuxbox ~]$ cut -f 3 distributions.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
[moi@linuxbox ~]$ cut -f 3 distributions.txt
12/07/2006
11/25/2008
06/19/2008
04/24/2008
11/08/2007
10/04/2007
10/26/2006
05/31/2007
10/18/2007
04/19/2007
05/11/2006
10/24/2006
05/13/2008
06/01/2006
10/30/2008
03/20/2006
Parce que notre distros fichier est délimité par des tabulations, il est préférable d'utiliser cut pour extraire des champs plutôt que des caractères. En effet, lorsqu'un fichier est délimité par des tabulations, il est peu probable que chaque ligne contienne le même nombre de caractères, ce qui rend le calcul de la position des caractères dans la ligne difficile, voire impossible. Dans notre exemple ci-dessus, cependant, nous avons maintenant extrait un champ qui contient heureusement des données de longueur identique, nous pouvons donc montrer comment fonctionne l'extraction de caractères en extrayant l'année de chaque ligne :
[moi@linuxbox ~]$ cut -f 3 distributions.txt | couper -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
[moi@linuxbox ~]$ cut -f 3 distributions.txt | couper -c 7-10
2006
2008
2008
2008
2007
2007
2006
2007
2007
2007
2006
2006
2008
2006
2008
2006
2007
2007
2006
2006
2008
2006
2008
2006
En exécutant cut une deuxième fois sur notre liste, nous sommes en mesure d'extraire les positions de caractère 7 à 10, ce qui correspond à l'année dans notre champ de date. Les 7-10 la notation est un exemple de plage. Les cut La page de manuel contient une description complète de la façon dont les plages peuvent être spécifiées.
Onglets extensibles
Notre distributions.txt fichier est idéalement formaté pour extraire des champs à l'aide cut. Mais que se passerait-il si nous voulions un fichier qui puisse être entièrement manipulé avec cut par caractères plutôt que par champs ? Cela nous obligerait à remplacer les caractères de tabulation dans le fichier par le nombre d'espaces correspondant. Heureusement, le package GNU Coreutils inclut un outil pour cela. Nommé expand, ce programme accepte un ou plusieurs arguments de fichier ou une entrée standard, et affiche le texte modifié sur la sortie standard.
Si nous traitons notre distributions.txt fichier avec expand, on peut utiliser le couper -c pour extraire n'importe quelle plage de caractères du fichier. Par exemple, nous pourrions utiliser la commande suivante pour extraire l'année de publication de notre liste, en développant le fichier et en utilisant cut pour extraire chaque caractère de la vingt-troisième position à la fin de la ligne :
[moi@linuxbox ~]$ développer distributions.txt | coupe -c 23-
Coreutils fournit également le étendre programme pour remplacer les espaces par des tabulations.
Lorsque vous travaillez avec des champs, il est possible de spécifier un délimiteur de champ différent plutôt que le caractère de tabulation. Ici, nous allons extraire le premier champ du / Etc / passwd fichier:
[moi@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | diriger
démon racine
[moi@linuxbox ~]$ cut -d ':' -f 1 /etc/passwd | diriger
démon racine
bin sys sync jeux homme lp mail nouvelles
bin sys sync jeux homme lp mail nouvelles
Le -d option, nous pouvons spécifier le caractère deux-points comme délimiteur de champ.