Ich möchte ein Leerzeichen als Begrenzungszeichen mit der cut
Befehl.
Welche Syntax kann ich dafür verwenden?
Ich möchte ein Leerzeichen als Begrenzungszeichen mit der cut
Befehl.
Welche Syntax kann ich dafür verwenden?
Wenn die Daten z. B. mehrere Leerzeichen enthalten, ist dies mit Cut nicht so einfach möglich. Ich habe es als nützlich empfunden, Eingaben zu normalisieren, um sie leichter verarbeiten zu können. Ein Trick ist die Verwendung von sed für die Normalisierung wie unten.
echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2 #bar
scut , ein cut-ähnliches Dienstprogramm (schlauer, aber langsamer), das jeden Perl-Regex als Breaking-Token verwenden kann. Standardmäßig wird an Leerzeichen gebrochen, aber Sie können auch an Mehrzeichen-Regexen, alternativen Regexen usw. brechen.
scut -f='6 2 8 7' < input.file > output.file
Der obige Befehl würde also Spalten an Leerzeichen umbrechen und die (0-basierten) Spalten 6 2 8 7 in dieser Reihenfolge extrahieren.
Ich habe eine (zugegebenermaßen etwas verwirrende) Antwort, die Folgendes beinhaltet sed
, reguläre Ausdrücke und Erfassungsgruppen:
\S*
- erstes Wort\s*
- Begrenzungszeichen(\S*)
- zweites Wort - gefangen.*
- Rest der LinieAls sed
Ausdruck muss die Erfassungsgruppe escaped werden, d. h. \(
y \)
.
En \1
gibt eine Kopie der erfassten Gruppe, d.h. das zweite Wort, zurück.
$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta
Wenn man sich diese Antwort ansieht, ist sie etwas verwirrend, und man könnte denken, warum sich die Mühe machen? Nun, ich hoffe, dass einige "Aha!" sagen und dieses Muster verwenden werden, um einige komplexe Textextraktionsprobleme mit einem einzigen sed
Ausdruck.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.