GNU/Linux >> Belajar Linux >  >> Linux

Regex (grep) untuk pencarian multi-baris diperlukan

Tanpa perlu menginstal varian grep pcregrep , Anda dapat melakukan pencarian multibaris dengan grep.

$ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c

Penjelasan:

-P aktifkan perl-regexp untuk grep (ekstensi ekspresi reguler yang kuat)

-z Perlakukan input sebagai sekumpulan baris, masing-masing diakhiri dengan nol byte (karakter ASCII NUL), bukan baris baru. Artinya, grep tahu di mana ujung garisnya, tetapi melihat inputnya sebagai satu garis besar. Hati-hati ini juga menambahkan karakter NUL tambahan jika digunakan dengan -o , lihat komentar.

-o cetak hanya cocok. Karena kita menggunakan -z , seluruh file seperti satu baris besar, jadi jika ada kecocokan, seluruh file akan dicetak; dengan cara ini tidak akan melakukan itu.

Di regexp:

(?s) aktifkan PCRE_DOTALL , yang artinya . menemukan karakter atau baris baru apa pun

\N temukan apa pun kecuali baris baru, bahkan dengan PCRE_DOTALL diaktifkan

.*? cari . dalam mode tidak serakah, yaitu berhenti sesegera mungkin.

^ temukan awal baris

\1 referensi balik ke grup pertama (\s* ). Ini adalah upaya untuk menemukan lekukan metode yang sama.

Seperti yang dapat Anda bayangkan, pencarian ini mencetak metode utama dalam C (*.c ) file sumber.


Saya tidak pandai grep. Namun masalah Anda dapat diselesaikan dengan menggunakan perintah AWK. Lihat saja

awk '/select/,/from/' *.sql

Kode di atas akan dihasilkan dari kemunculan pertama select sampai urutan pertama dari from . Sekarang Anda perlu memverifikasi apakah pernyataan yang dikembalikan memiliki customername atau tidak. Untuk ini, Anda dapat menyalurkan hasilnya. Dan bisa menggunakan awk atau grep lagi.


Linux
  1. Linux mencari kata dan menampilkan seluruh baris

  2. Cara cepat untuk mencari baris kode tertentu melalui banyak file dalam sebuah proyek

  3. Bagaimana cara Menggabungkan find dan grep untuk pencarian yang kompleks? ( GNU/linux, temukan, grep )

  1. Bagaimana Menggunakan Grep Untuk Mencari Pola Yang Dimulai Dengan Tanda hubung (-)?

  2. Cari File Dengan Gui?

  3. 10 Contoh Perintah Grep Praktis untuk Pengembang

  1. Menggunakan grep untuk mencari secara terbalik

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

  3. Output pipa untuk digunakan sebagai spesifikasi pencarian untuk grep di Linux