Vous pouvez utiliser -B1
pour imprimer également la ligne précédente, puis saisir uniquement la première ligne :
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Ou faites-le avec awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Ici p
conserve la sauvegarde de la dernière ligne. Lorsque la ligne d'entrée contient Minion
, puis il est imprimé. Notez que cela fonctionnera pour plusieurs correspondances contrairement au grep
solution ci-dessus qui ne donne que la première correspondance.
Si vous êtes lié à grep
alors vous pourriez maintenir des correspondances multi-lignes ...
fichier :
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Utiliser
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Si vous pouvez utiliser sed
alors il y a une réponse ici dans U&L que j'ai plagié ci-dessous
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10: