Hier grep -P '^[^\t]*\t3\t' your_file
aus den Kommentaren die längere Erklärung für meinen mysteriösen Befehl lautet:
ich davon ausgegangen, dass die Spaltenbegrenzer ein Register ist. grep ohne -P
würde einige merkwürdige Dinge erfordern, um es direkt zu verwenden (siehe z.B. see here). Die -P
ermöglicht es, einfach \t
ohne Probleme zu schreiben. Wenn zum Beispiel Ihr Trennzeichen ;
ist, dann können Sie das \t
durch ;
ersetzen und Sie brauchen die -P
Option nicht.
Having said that, lässt die Idee hinter dem regulären Ausdruck erklären: Sie sagten, Sie 3
in der zweiten Spalte übereinstimmen soll:
^
bedeutet: am Anfang der Zeile
[^\t]*
bedeutet: Null oder mehr (*
) Vorkommen von etwas, das nicht eine Lasche ([^\t]
hier die ^
bedeutet „keine“)
- von Reitern gefolgt
- gefolgt von
3
- von Reitern gefolgt
Jetzt haben wir effektiv die Idee zum Ausdruck gebracht, dass wir ein 3
wie der Inhalt der zweiten Spalte benötigen (\t3\t
) und wir sind in dem genauen Inhalt der ersten Spalte nicht interessiert . Die ^[^\t]*\t
ist nur notwendig, um die Idee "Was folgt in der zweiten Spalte ist" auszudrücken.
Wenn Sie etwas in der vierten Spalte anpassen möchten, können Sie dies verwenden, um die ersten drei Spalten zu überspringen und eine 4 in der vierten Spalte: ^([^\t]*\t){3}4
. (Beachten Sie die Klammern und die {3}
).
Wie Sie viele Details sehen können und awk ist viel eleganter und einfacher.
Sie können dies in der documentation of grep lesen und dann müssen Sie etwas über reguläre Expression, z. start here.
'grep"^muster "file' vielleicht? –
Tnx, das funktioniert für 1. Spalte, was ist mit der 2. Spalte? –
Haben Sie eine dritte Spalte oder die zweite Spalte die letzte? –