Cara Grep hingga karakter atau String tertentu

2

Saya perlu mengekstraksi data log dari banyak file log senilai terrabytes. Masalahnya adalah, data yang saya butuhkan dimulai dan diakhiri dengan pola yang dapat saya identifikasi, tetapi kode antara bisa berupa apa saja antara 10 dan 100+ baris.

Contoh:

Start
# lots of lines here
End

Saat ini, yang saya lakukan adalah grep -A 50 "Start", yang memberi saya Start dan 50 baris sesudahnya. Namun, dalam hampir semua kasus itu lebih atau kurang dari yang saya butuhkan. Lebih berarti file laporan yang dihasilkan tumbuh Gigabytes lebih besar dari yang seharusnya dan kurang berarti saya tidak mendapatkan informasi yang saya butuhkan.

Apakah ada cara untuk mengekstrak apa yang saya butuhkan, menggunakan alat Unix / Linux standar?

Sean Patrick Floyd
sumber
Apa itu ekspresi reguler?
Ярослав Рахматуллин

Jawaban:

3

Cobalah dengan awk:

awk '/^Start/,/^End/' file

atau jika Anda lebih suka sed:

sed -n '/Start/,/End/p' file
Simon
sumber
Keren, terima kasih, saya akan mencoba dan memberi tahu Anda
Sean Patrick Floyd
@SeanPatrickFloyd sama-sama Saya menambahkan juga solusi dengan sed.
Simon
Kode yang bagus di sana. Apakah Anda keberatan menjelaskan caranya sed bekerja dalam hal ini? Saya mencoba mencari tahu sendiri memeriksa halaman manual pada ss64 dan melakukan beberapa percobaan coba-coba, tetapi saya masih belum mengerti. :) Terima kasih.
@Radoo sed -n - & gt; Menekan output default. ' - & gt; mulai dari perintah filter /Mulai/ - & gt; ekspresi reguler , - & gt; pemisah /Akhir/ - & gt; ekspresi reguler hal - & gt; Mencetak. Salin ruang pola ke output standar. ' - & gt; ujung filter mengajukan - & gt; nama file
Simon
1
@Radoo: periksa bagian "Alamat" dari halaman manual - perintah sed ini menggunakan dua alamat (keduanya merupakan ekspresi reguler) untuk memilih rentang garis untuk menerapkan perintah "p".
Gordon Davisson