Hier ist ein Beispiel für das Aufteilen cut
von Eingaben in Felder mithilfe eines Leerzeichenbegrenzers und das Abrufen des zweiten Felds:
cut -f2 -d' '
Wie kann der Begrenzer als Tabulator anstatt als Leerzeichen definiert werden?
Hier ist ein Beispiel für das Aufteilen cut
von Eingaben in Felder mithilfe eines Leerzeichenbegrenzers und das Abrufen des zweiten Felds:
cut -f2 -d' '
Wie kann der Begrenzer als Tabulator anstatt als Leerzeichen definiert werden?
Antworten:
Zwei Wege:
Drücken Sie Ctrl+ Vund dann Tab.
cut -f2 -d' ' infile
oder schreibe es so:
cut -f2 -d$'\t' infile
-d
Argument einfach weglassen ).
ksh93
nicht 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
).
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
cut
für Windows konzipieren, nicht dem vollständigen Standard folgen würden.
cut
fü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.
Allgemeiner, ohne dass unsichtbare Zeichen erforderlich sind: Verwenden Sie tr
diese 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.
abc(space)def(tab)ghi
? Ihre Antwort wird nachgeben def
, aber sie sollte nachgeben ghi
. In ähnlicher Weise wird ABC(tab)DEF(space)GHI
Ihre Antwort nachgeben , wenn die Eingabe lautet DEF
, aber sie sollte nachgeben DEF(space)GHI
.
echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2