Apakah ada perintah di Mac OS X yang dapat melakukan pencarian regil multiline?


12

Saya ingin melakukan pencarian regex sederhana secara rekursif melalui direktori yang tidak terbatas pada satu baris.

Saya mencoba grep dan ack, tetapi tampaknya tidak ada yang mendukung ini.

Saya tahu ini seharusnya tidak terlalu mahal secara komputasi (dalam kasus saya) karena editor teks pilihan saya ( Sublime Text ) dapat melakukannya dengan baik.

Saya hanya mencari versi baris perintah sederhana ini. Google telah mengaktifkan pcregrep , tetapi sepertinya saya tidak dapat menemukannya untuk Mac. Apakah saya hanya tidak mencari di tempat yang tepat?


1
Memberikan contoh apa yang Anda cari akan sangat membantu. Dan apakah grepdengan konteks membantu Anda menemukan yang Anda inginkan ( -C1)?
mbb

Jawaban:


15

Instal Homebrew lalu:

brew install pcre

Ini akan memberi Anda yang terbaru pcregrep


1

Anda tidak mengatakan dengan tepat apa yang Anda cari, jadi saya akan membayangkan tugas untuk mencari tahu apakah file tersebut berisi 112 diikuti oleh 223, mengabaikan baris baru.

Solusi yang sedikit dibuat-buat awk:

awk -vRS='' '/112.*223/ { print "found it"; exit }' file.in

The RSvariabel berisi pemisah record. Dengan mengaturnya ke string kosong, seluruh file akan dibaca sebagai satu catatan.

Ini mungkin akan sangat tidak efisien memori pada file besar.

Ngomong-ngomong, saya melakukan ini di OpenBSD, tetapi OS X awk harus bekerja dengan cara yang sama.


Saya menggunakan OS X 10.11.2 dan mendapatkan "awk: invalid -v option"
HaggleLad

di OS X Anda membutuhkan ruang antara vdan RS. yaituawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil

0

"pcregrep" dapat merujuk ke kandang yang lebih tua pcregrepdan yang lebih baru pcre2grep. Keduanya disediakan oleh proyek PCRE dipcre.org .

Port Mac menyediakan yang pertama sebagai bagian dari port pcre(stabil pada versi 8.40), dan yang terakhir sebagai bagian dari port pcre2(saat ini versi 10.22). Instal melalui:

% sudo port install pcre2
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.