(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.,
Saya harap ini membantu.