GNU/Linux >> Belajar Linux >  >> Linux

Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

Pertanyaan ini sudah memiliki jawaban di sini :Bagaimana saya bisa "mengambil" pola di beberapa baris?

(9 jawaban)
Tutup 2 tahun yang lalu.

Apakah mungkin melakukan pencocokan pola multiline menggunakan sed , awk atau grep ? Ambil contoh, saya ingin mendapatkan semua baris di antara { dan }

Jadi harus bisa cocok

 1. {}
 2. {.....}
 3. {.....
.....}

Awalnya pertanyaan menggunakan <p> sebagai contoh. Mengedit pertanyaan untuk menggunakan { dan} .

Jawaban yang Diterima:

Meskipun saya setuju dengan saran di atas, bahwa Anda ingin mendapatkan parser untuk sesuatu yang lebih dari kecil atau sepenuhnya ad-hoc, ini (hampir 😉 mungkin untuk mencocokkan blok multi-baris antara kurung kurawal dengan sed.

Ini adalah versi debug dari kode sed

sed -n '/[{]/,/[}]/{
    p
    /[}]/a
     end of block matching brace

    }' *.txt

Beberapa catatan,

  • -n berarti 'tidak ada garis cetak default yang diproses'.
  • 'p' berarti sekarang cetak barisnya.
  • Konstruk /[{]/,/[}]/ adalah ekspresi rentang. Artinya scan sampai Anda menemukan sesuatu yang cocok dengan pola pertama (/[{]/) DAN kemudian pindai sampai Anda menemukan pola ke-2 (/[}]/) KEMUDIAN lakukan tindakan apa pun yang Anda temukan di antara {} dalam kode sed. Dalam hal ini 'p' dan kode debugging. (tidak dijelaskan di sini, gunakan, mod, atau keluarkan sebagai yang terbaik untuk Anda).

Anda dapat menghapus /[}]/a end of block debugging ketika Anda membuktikan kepuasan Anda bahwa kode tersebut benar-benar cocok dengan blok yang dibatasi oleh {,}.

Contoh kode ini akan melewatkan apa pun yang tidak berada di dalam kurung kurawal.
Ini akan, seperti disebutkan oleh orang lain di atas, akan mudah bingung jika Anda memiliki {,} tambahan yang disematkan dalam string, reg-exps, dll., ATAU di mana kurung kurawal adalah baris yang sama , (dengan ucapan terima kasih kepada fred.bear)

Saya harap ini membantu.


Linux
  1. Menggunakan Sed untuk Mencari &mengganti garis di antara rentang pola

  2. Mengganti Pola Setelah Kecocokan Ke-N Ditemukan Di Setiap Baris??

  3. Bagaimana saya bisa mencari pola multiline dalam sebuah file?

  1. Menggunakan grep dan sed untuk mencari dan mengganti string

  2. grep hanya cocok dengan garis dalam rentang yang ditentukan

  3. Hapus baris kosong menggunakan sed

  1. Cetak Baris Sebelumnya Setelah Pencocokan Pola Menggunakan Sed?

  2. Tampilan cocok ditemukan atau tidak menggunakan awk

  3. Menggunakan sed untuk mengganti antara pola tertentu