Podrías usar -B1
para imprimir la línea anterior también y luego tomar solo la primera línea:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
O hazlo con awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Aquí p
sigue guardando la última línea. Cuando la línea de entrada contiene Minion
, luego se imprime. Tenga en cuenta que esto funcionará para múltiples coincidencias a diferencia del grep
solución anterior que da solo la primera coincidencia.
Si estás atado a grep
entonces podría mantener coincidencias de varias líneas...
archivo:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Usando
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Si puedes usa sed
entonces hay una respuesta aquí en U&L que he plagiado a continuación
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10: