Můžete použít -B1
vytisknout i předchozí řádek a poté uchopit pouze první řádek:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Nebo to proveďte pomocí awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Zde p
stále ukládá poslední řádek. Když vstupní řádek obsahuje Minion
, pak se vytiskne. Pamatujte, že to bude fungovat pro více shod na rozdíl od grep
řešení, které poskytuje pouze první shodu.
Pokud jste vázáni na grep
pak byste mohli udržovat víceřádkové shody ...
soubor:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Pomocí
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Pokud můžete použít sed
pak je zde odpověď v U&L, kterou jsem níže plagioval
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10:
Nahraďte každý znak prázdného místa na konci každého řádku '_'
Existuje standardní fiktivní spustitelný soubor, který v Linuxu nic nedělá?