GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menemukan Kejadian Terakhir Dari Pola Dan Mencetak Semua Baris Setelah Kejadian Terakhir?

Pertanyaan ini sudah memiliki jawaban di sini :Mendapatkan teks dari penanda terakhir ke EOF di POSIX.2

(5 jawaban)
Tutup 2 tahun lalu.

Saya memiliki file yang berisi beberapa kemunculan pola “====” . Pola-pola ini diikuti oleh teks. Saya ingin mencari kemunculan terakhir “====” pola dan cetak semua garis setelah pola. Adakah ide tentang bagaimana melakukannya di bash? Kombinasi grep , awk , sed atau tail , dll..?

Contoh berkas:

====

First run of script

End of first Script

====

2nd run of script

End of 2nd script

====

3rd run of script

End of 3rd script

Output dari perintah akan terlihat seperti di bawah ini.

3rd run of script

End of 3rd script

Jawaban yang Diterima:

Metode alat perangkat lunak, lebih efisien untuk file besar karena hanya membaca akhir file, lalu berhenti ketika menemukan kecocokan terakhir:

tac sample.txt | grep -F -m1 -B 999999 '====' | head -n -1 | tac

Catatan:tambah atau kurangi 999999 sesuai kebutuhan, hanya agar lebih lama dari kecocokan apa pun yang memungkinkan. Kode ini akan berfungsi paling baik jika diketahui sebelumnya bahwa kecocokan terakhir diketahui berada di dekat akhir file besar. Lihat juga Glenn Jackman jawaban dengan varian untuk awk dan sed yang menghindari kebutuhan untuk 999999 . Untuk sistem dengan sumber daya yang sangat rendah, grep lebih efisien daripada awk atau sed .

Untuk menghindari menebak, beberapa menambahkan stat keburukan akan berhasil:

f=sample.txt; tac "$f" | grep -F -m1 -B $(stat -c '%s' "$f") '====' |
head -n -1 | tac

Linux
  1. Bagaimana Menemukan Jumlah Garis Vertikal Yang Tersedia Di Terminal?

  2. Cetak Konten File Tanpa Baris Pertama Dan Terakhir?

  3. Bagaimana Menemukan Jenis File Img Dan Memasangnya?

  1. Bagaimana menemukan semua file yang jarang di Linux

  2. Menggunakan awk untuk mencetak semua kolom dari n ke yang terakhir

  3. Cara mendapatkan semua file yang melebihi ukuran tertentu dan menghapusnya

  1. Cara menggunakan sed untuk menghapus n baris terakhir dari sebuah file

  2. Cara menemukan bidang terakhir menggunakan 'potong'

  3. Bagaimana cara memutuskan tautan semua symlink di bawah direktori?