Potresti usare -B1
per stampare anche la riga precedente e quindi prendere solo la prima riga:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Oppure fallo con awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Qui p
continua a salvare l'ultima riga. Quando la riga di input contiene Minion
, quindi viene stampato. Nota che funzionerà per più corrispondenze a differenza del grep
soluzione sopra la quale fornisce solo la prima corrispondenza.
Se sei legato a grep
allora potresti mantenere le corrispondenze su più righe ...
file:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Utilizzando
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Se puoi usa sed
poi c'è una risposta qui in U&L che ho plagiato di seguito
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10: