Saya memiliki file teks yang mencantumkan nama host dan di baris langsung di bawah menyatakan hasil ping dari pelayan garam. Berikut adalah contoh keluarannya:
T5F6Z12:
Minion did not return. [Not connected]
Saya harus dapat mengidentifikasi terlebih dahulu apakah teks (Minion tidak kembali) ada dan jika demikian, ambil nama host yang terkait dengan kesalahan sehingga saya dapat menjalankan perintah lain terhadap server itu.
Saya sudah mulai dengan ini:
if grep -q "Minion" /srv/salt/test/ping_results
then
Jadi saya cukup yakin saya perlu memahami kata "Minion" karena itu hanya akan muncul untuk server yang gagal dalam pengujian. Tetapi setelah saya mengidentifikasinya, saya tidak yakin bagaimana cara mengambil nama host terkait di atasnya dalam file teks.
Jawaban yang Diterima:
Anda dapat menggunakan -B1
untuk mencetak baris sebelumnya juga dan kemudian ambil hanya 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
Di sini p
terus menyimpan baris terakhir. Ketika baris input berisi Minion
, kemudian akan dicetak. Perhatikan bahwa ini akan berfungsi untuk beberapa kecocokan tidak seperti grep
solusi di atas yang hanya memberikan kecocokan pertama.