(verwende MacOSX und konvertiere dies möglicherweise in ein Perl-Skript). Ich bin ziemlich neu bei Linux/Unix-Befehlen und meine Google-Suche war erfolglos.
Ich erstelle ein Skript, um schnell nach Trainingsaufzeichnungen einer Person suchen zu können. Ich mache das so, dass ich die Trainingsaufzeichnungen der Person in einer Zeile aufliste (vielleicht gibt es einen besseren Weg?). Wenn ich Grep verwende, um nach einem bestimmten Namen, einer Ausbildungsposition oder einem Datum zu suchen, wird die gesamte Zeile angezeigt. Ich möchte mit Grep nach einer bestimmten Zeichenfolge suchen und nur den Anfang der Zeile anzeigen, d. h. die ersten beiden Wörter (Vorname / Nachname).
Die Datei Training.txt sieht ungefähr so aus:
Ivie, Shawn Kassierer 24.05.2016 Lager 02.12.2016 Service-Desk 31.11.2016
Allen, Adam Kassierer 10.05.2016 Lagerraum 13.12.2016
Martinez, Jessica Kassiererin 20.05.2017 Lager 29.10.2016 Vorgesetzte 23.01.2016
Der Befehl, den ich jetzt verwende, ist:
grep "Cashier" Training.txt
das alle 3 Datensätze zurückgibt, den gesamten Zeileninhalt aller Datensätze.
Ich habe es versucht:
grep -E -o ".{0,0}Cashier.{0,5}" Training.txt
das (in diesem Beispiel alle 3 Datensätze) zurückgibt, aber vor „Kasse“ null Zeichen und danach 5 Zeichen anzeigt.
Cashier 5/10
Wie kann ich ein Grep (oder vielleicht einen Perl-Befehl) einbinden, um beispielsweise nach „Supervisor“ zu suchen und nur die ersten beiden Wörter (Namen) anzuzeigen? Zweitens: Irgendwelche Ideen, die diesen Vorgang einfacher machen könnten? (Eine Tabellenkalkulation ist in diesem Fall einfach nicht hilfreich).
Antwort1
Dies ist perfekt für awk
:
awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile
Sie können die Suche sogar auf das dritte Feld beschränken, damit Sie für jemanden mit dem Namen „Supervisor Bob“ kein falsches Positiv erhalten:
awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile
Antwort2
Sie können grep
es bei Perl
aktiviertem Modus verwenden:
grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'
Ergebnisse
Ivie, Shawn
Allen, Adam
Martinez, Jessica
Arbeiten
- Im Perl-Modus sucht grep nach zwei Feldern (\S+) vom Zeilenanfang.
- Und wenn wir am Ende des Leerzeichens des zweiten Felds einen Kassierer gefolgt von einem Leerzeichen sehen, haben wir unsere Übereinstimmung gefunden. Da die Zeichenfolge „Kassierer“ als Lookaround dient, wird sie nicht in die Übereinstimmung einbezogen.