425 Stimmen

Leerzeichen als Begrenzungszeichen mit dem Befehl cut verwenden

Ich möchte ein Leerzeichen als Begrenzungszeichen mit der cut Befehl.

Welche Syntax kann ich dafür verwenden?

5voto

Anssi Punkte 2449

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

3voto

Harry Mangalam Punkte 41

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.

1voto

Stephen Quan Punkte 16456

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 Linie

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

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.

Powered by:

X