Có một lệnh trong Mac OS X có thể thực hiện tìm kiếm regex đa dòng không?


12

Tôi muốn thực hiện một tìm kiếm regex đơn giản theo cách đệ quy thông qua một thư mục không bị giới hạn trong các dòng đơn.

Tôi đã thử grep và ack, nhưng dường như không hỗ trợ điều này.

Tôi biết nó không nên quá đắt tiền (trong trường hợp của tôi) bởi vì trình soạn thảo văn bản của tôi ( Sublime Text ) có thể làm tốt điều đó.

Tôi chỉ tìm kiếm một phiên bản dòng lệnh đơn giản này. Google đã bật pcregrep , nhưng dường như tôi không thể tìm thấy điều đó cho Mac. Có phải tôi chỉ không nhìn đúng chỗ?


1
Đưa ra một ví dụ về những gì bạn đang tìm kiếm sẽ hữu ích. Và grepvới ngữ cảnh có giúp bạn tìm thấy những gì bạn muốn ( -C1) không?
mbb

Câu trả lời:


15

Cài đặt Homebrew và sau đó:

brew install pcre

Điều này sẽ cung cấp cho bạn mới nhất pcregrep


1

Bạn đã không nói chính xác những gì bạn đang tìm kiếm vì vậy tôi sẽ tưởng tượng nhiệm vụ để tìm hiểu xem tập tin có chứa 112 theo sau là 223 hay không, không quan tâm đến các dòng mới.

Một awkgiải pháp hơi khó khăn :

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

Các RSbiến có chứa các dấu phân cách kỷ lục. Bằng cách đặt nó thành chuỗi trống, toàn bộ tệp sẽ được đọc dưới dạng một bản ghi.

Điều này có thể sẽ rất kém hiệu quả bộ nhớ trên các tệp lớn.

Nhân tiện, tôi đang làm điều này trên OpenBSD, nhưng OS X awk phải hoạt động theo cùng một cách.


Tôi đang dùng OS X 10.11.2 và nhận tùy chọn "awk: không hợp lệ -v"
HaggleLad 17/03/2016

Trong OS X, bạn cần một khoảng trắng giữa vRS. tức làawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil

0

"pcregrep" có thể đề cập đến một ổn định cũ hơn pcregrepvà mới hơn pcre2grep. Cả hai đều được cung cấp bởi dự án PCRE tạipcre.org .

Cổng Mac cung cấp trước đây là một phần của cổng pcre(ổn định ở phiên bản 8.40) và cổng sau là một phần của cổng pcre2(phiên bản hiện tại 10.22). Cài đặt qua:

% sudo port install pcre2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.