Sie könnten -B1
verwenden um auch die vorherige Zeile zu drucken und dann nur die erste Zeile zu greifen:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Oder machen Sie es mit awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Hier p
speichert immer die letzte Zeile. Wenn die Eingabezeile Minion
enthält , dann wird es gedruckt. Beachten Sie, dass dies im Gegensatz zu grep
für mehrere Übereinstimmungen funktioniert obige Lösung, die nur die erste Übereinstimmung liefert.
Wenn Sie an grep
gebunden sind dann könnten Sie mehrzeilige Übereinstimmungen pflegen ...
Datei:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Verwenden von
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Wenn Sie sed
verwenden können dann gibt es hier in U&L eine Antwort, die ich unten plagiiert habe
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10: