Wie grep Spalte nach dem zweiten Rohr

1

Beispiel:

3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

Erwartete Ansicht nach grep:

test@test.com
Kalin Borisov
quelle

Antworten:

4

Vielleicht ist awk für diese Verwendung besser geeignet:

awk 'BEGIN { FS = "|" } ; { print $3 }'

Wenn Sie mehr als ein Feld aus einer solchen Eingabe extrahieren müssen, ist es meiner Meinung nach am einfachsten, awk zu verwenden.

(AUS: entschuldigen Sie, wenn ich in eine falsche Richtung weise )

ppeterka
quelle
Vielleicht? Warum denkst du das?
1
Das Extrahieren mehrerer Felder ist möglich mit cut:cut -d'|' -f3-5
2
Aufgrund meiner bisherigen Erfahrungen bin ich davon ausgegangen, dass entweder das Poster oder eine andere Person, die diese Seite findet, mit dem Problem konfrontiert ist, dass mehr als eine Spalte für die Eingabe erforderlich ist. Ein weniger kompliziertes Werkzeug (Schnitt) kann jedoch schneller sein als ein Universalwerkzeug (awk), wenn die eingeschränkten Funktionen des leichteren Werkzeugs ausreichen. (Ich habe keine Daten, um dies zu unterstützen.) Außerdem ist der Befehl awk für mich besser lesbar. Wenn ich das geschriebene Drehbuch noch einmal lesen müsste, würde ich gerne die awk-Zeile zugunsten der anderen sehen - aber das ist nur eine persönliche Meinung, keine objektive Tatsache. Deshalb nur 'vielleicht'.
2
+1 Tut mir leid, ich hatte meine Hausaufgaben nicht gemacht, danke, dass du darauf hingewiesen hast!
3

Warum grep? Verwendencut

echo "3|100|[email protected]|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|" | cut -d '|' -f 3
Sergei Kurenkov
quelle
1

Stellen Sie sich vor, Ihr Inhalt ist in dieser Datei vorhanden file1

[max @ localhost ~] $ cat file1 3 | 100 | [email protected] | 0 | 0 | 6: 1,10,11,12,13,2,3,4,5,6,9 | 7: 1 10,11,13,16,2,4,5,6,9 |

thirdVerwenden Sie diesen Befehl, um das Feld auszuschneiden

[max @ localhost ~] $ cut -d "|" -f3 Datei1

[email protected]

Hier

-d: Gibt an, dass das Zeichen | verwendet werden soll als Begrenzer

-f1: Erstes Feld drucken, wenn Sie das zweite Feld drucken möchten, verwenden Sie -f2, das dritte Feld verwenden Sie -f3 und so weiter ...

Angenommen, der file1Inhalt ist so

[max @ localhost ~] $ cat file1

root: x: 0: 0: root: / root: / bin / bash

Dann müssen wir :als Trennzeichen so verwenden

firstVerwenden Sie zum Ausschneiden des Feldes f1

[max @ localhost ~] $ cut -d ":" -f1 Datei1
Wurzel

secondVerwenden Sie zum Ausschneiden des Feldes f2

[max @ localhost ~] $ cut -d ":" -f2 Datei1
X

thirdVerwenden Sie zum Ausschneiden des Feldes f3

[max @ localhost ~] $ cut -d ":" -f3 Datei1
0
max
quelle
1

Nur zum Spaß, hier ist, wie Sie es machen können grepund tr:

<infile grep -Eo '^([^|]+\|){3}' | grep -Eo '[^|]+\|$' | tr -d '|'

Der erste reguläre Ausdruck erfasst die ersten drei durch Pipe getrennten Felder. Der zweite Grep wählt das letzte Feld aus und entfernt das verbleibende Trennzeichen.

Thor
quelle