Comment définir le délimiteur 'tab' avec 'cut' dans BASH?


Réponses:


301

Deux façons:

Appuyez sur Ctrl+ Vpuis sur Tab.

cut -f2 -d'   ' infile

ou écrivez-le comme ceci:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige

8
Ni ne fonctionne dans Windows (par exemple, Git Bash) de toute évidence. Utilisez la réponse de @ Mikel ici (le délimiteur par défaut est Tabulation, omettez tout simplement l' -dargument).
Ahmed Fasih


4
@poige, ça vient de ksh93, pas bash. Cela est au moins supporté par ksh93, zsh, bash, mksh et FreeBSD ( il pourrait en être de même pour la prochaine inversion majeure de la spécification standard POSIXsh ).
Stéphane Chazelas


191

Tab est la valeur par défaut.

Voir la page de manuel de coupe .

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

Donc, vous devriez juste écrire

cut -f 2

2
Oops n'a pas remarqué cette ligne.
Muhammad Hasan Khan

4
Mais il est probablement toujours plus sûr de mentionner explicitement ces drapeaux, à la fois pour la lisibilité et la portabilité. J'imagine que certaines personnes qui conçoivent cutpour Windows ne suivraient pas la norme complète.
Willem Van Onsem le

3
Cela devrait être une réponse acceptée: code le plus simple, explication la plus simple. ya cloué: youtube.com/watch?v=dpNTHl7y45Y
Neuronet

5
Cette réponse a changé ma vie
matheeeny

1
@WillemVanOnsem, si quelqu'un écrit une version cutpour Windows et ne suit pas la spécification Posix , pour elle, il n'y a aucune raison de supposer que tout script POSIX fonctionnera avec ce système. S'en tenir aux fonctionnalités spécifiées par POSIX. N'essayez pas de permettre de futures mises en œuvre hypothétiques non conformes; ce n'est pas ce que "portabilité" signifie.
Wildcard

12
awk -F '\t' '{ print $2 }' inputfile

Ceci extrait le deuxième champ délimité par des tabulations de chaque ligne d’entrée inputfile.


10

De manière plus générique, sans requérir de caractères invisibles: utilisez-le trpour convertir les délimiteurs en un format qui peut être spécifié plus facilement cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr est un outil simple, mais puissant, de correspondance et de remplacement de personnage.


1
Mais que faire si l'entrée est abc(space)def(tab)ghi? Votre réponse cédera def, mais elle devrait céder ghi. De même, si l'entrée est ABC(tab)DEF(space)GHI, votre réponse donnera DEF, mais elle devrait céder DEF(space)GHI.
G-Man

@ G-Man: Le délimiteur d'espace n'était qu'un exemple. Utilisez le délimiteur approprié pour vos données, par exemple une virgule. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
novembre

... Mais oui, si le délimiteur doit être un onglet, mon approche ne fonctionnera pas.
Nobar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.