-B1
を使用できます 前の行も印刷し、最初の行だけを取得するには:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
または、awk
で実行します :
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
こちら p
最後の行を保存し続けます。入力行に Minion
が含まれる場合 、それから印刷されます。 grep
とは異なり、これは複数の一致に対して機能することに注意してください 上記のソリューションでは、最初の一致のみが得られます。
grep
に縛られている場合 その後、複数行の一致を維持できます ...
ファイル:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
使用
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
sed
が使える場合 それから、私が以下で盗用した答えがここU&Lにあります
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10: