Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<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.


image

-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.


image

-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.


image

--complement Extraire toute la ligne de texte, à l'exception de ces portions

spécifié par -c (facultatif) -f.


image


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


image

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.


Meilleur système d'exploitation Cloud Computing chez OnWorks :