Wie kann man in BASH das Trennzeichen 'tab' mit 'cut' definieren?


Antworten:


301

Zwei Wege:

Drücken Sie Ctrl+ Vund dann Tab.

cut -f2 -d'   ' infile

oder schreibe es so:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige

8
Beides funktioniert offensichtlich nicht unter Windows (zB Git Bash). Verwenden Sie dort die Antwort von @ Mikel (Standardtrennzeichen ist tab, -dArgument einfach weglassen ).
Ahmed Fasih


4
@poige, das kommt ksh93nicht von bash. Das ist von ksh93 unterstützt, zsh, bash, mksh und FreeBSD sh mindestens ( es könnte es machen auf die nächste Haupt Reversion der POSIX - Standard - Spezifikation fürsh ).
Stéphane Chazelas


191

Tab ist die Standardeinstellung.

Siehe die Manpage cut .

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

Also solltest du einfach schreiben

cut -f 2

2
Ups, diese Zeile ist mir nicht aufgefallen.
Muhammad Hasan Khan

4
Es ist jedoch wahrscheinlich immer sicherer, solche Flags explizit zu erwähnen, sowohl aus Gründen der Lesbarkeit als auch der Portabilität. Ich kann mir vorstellen, dass einige Leute, die ein cutfür Windows konzipieren, nicht dem vollständigen Standard folgen würden.
Willem Van Onsem

3
Dies sollte als Antwort akzeptiert werden: einfachster Code, einfachste Erklärung.
Du hast

5
Diese Antwort hat mein Leben verändert
matheeeny

1
@WillemVanOnsem: Wenn jemand eine Version von cutfür Windows schreibt und die POSIX-Spezifikation dafür nicht befolgt, gibt es keinen Grund anzunehmen, dass ein POSIX-Skript mit diesem System funktioniert. Halten Sie sich an die POSIX-spezifischen Funktionen. Versuchen Sie nicht, hypothetische zukünftige nicht konforme Implementierungen zuzulassen. Das ist nicht das, was "Portabilität" bedeutet.
Wildcard

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

Dies extrahiert das zweite durch Tabulatoren getrennte Feld jeder Eingabezeile aus inputfile.


10

Allgemeiner, ohne dass unsichtbare Zeichen erforderlich sind: Verwenden Sie trdiese Option , um die Begrenzer in ein Format zu konvertieren, in dem die Angabe einfacher ist cut.

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

tr ist ein einfaches, aber leistungsfähiges Tool zum Abgleichen und Ersetzen von Zeichen.


1
Aber was ist, wenn der Eingang ist abc(space)def(tab)ghi? Ihre Antwort wird nachgeben def, aber sie sollte nachgeben ghi. In ähnlicher Weise wird ABC(tab)DEF(space)GHIIhre Antwort nachgeben , wenn die Eingabe lautet DEF, aber sie sollte nachgeben DEF(space)GHI.
G-Man

@ G-Man: Der Raumbegrenzer war nur ein Beispiel. Verwenden Sie das für Ihre Daten geeignete Trennzeichen, beispielsweise ein Komma. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
26.

... Aber ja, wenn das Trennzeichen ein Tabulator sein muss, dann funktioniert mein Ansatz nicht.
Am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.