Anda bisa menggunakan -B1
untuk mencetak baris sebelumnya juga dan kemudian hanya mengambil baris pertama:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
Atau, lakukan dengan awk
:
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
Ini p
terus menyimpan baris terakhir. Ketika baris input berisi Minion
, lalu dicetak. Perhatikan bahwa ini akan bekerja untuk beberapa kecocokan tidak seperti grep
solusi di atas yang hanya memberikan kecocokan pertama.
Jika Anda terikat dengan grep
maka Anda dapat mempertahankan kecocokan multi-baris ...
berkas:
T5F6Z12:
Minion did not return. [Not connected]
T5F6Z11:
Pinion did return. [connected]
T5F6Z10:
Minion did not return. [Not connected]
Menggunakan
grep -B 1 "Minion" file | grep ":$"
T5F6Z12:
T5F6Z10:
Jika Anda dapat menggunakan sed
lalu ada jawaban di sini di U&L yang telah saya jiplak di bawah
sed -n '/Minion/{x;p;d;}; x' file
T5F6Z12:
T5F6Z10:
Ganti setiap karakter spasi putih di akhir setiap baris dengan '_'
Apakah ada file executable tiruan standar yang tidak melakukan apa pun di Linux?