Gibt es in Mac OS X einen Befehl, der eine mehrzeilige Regex-Suche durchführen kann?


12

Ich möchte eine einfache Regex-Suche rekursiv durch ein Verzeichnis durchführen, das nicht auf einzelne Zeilen beschränkt ist.

Ich habe es mit grep und ack versucht, aber keiner scheint dies zu unterstützen.

Ich weiß, dass es (in meinem Fall) nicht zu rechenintensiv sein sollte, da mein bevorzugter Texteditor ( Sublime Text ) dies problemlos kann.

Ich suche nur nach einer einfachen Kommandozeilenversion davon. Google hat pcregrep aufgetaucht , aber ich kann das für Mac nicht finden. Bin ich einfach nicht am richtigen Ort?


1
Es wäre hilfreich, ein Beispiel dafür zu geben, wonach Sie suchen. Und grephilft Ihnen der Kontext dabei, das zu finden, was Sie wollen ( -C1)?
mbb

Antworten:


15

Installieren Sie Homebrew und dann:

brew install pcre

Dies gibt Ihnen die neuesten pcregrep


1

Sie haben nicht genau gesagt, wonach Sie suchen, also stelle ich mir die Aufgabe vor, herauszufinden, ob die Datei 112 gefolgt von 223 enthält, ohne Rücksicht auf Zeilenumbrüche.

Eine leicht erfundene awkLösung:

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

Die RSVariable enthält das Datensatztrennzeichen. Wenn Sie die leere Zeichenfolge festlegen, wird die gesamte Datei als ein Datensatz gelesen.

Dies wird bei großen Dateien wahrscheinlich sehr speichereffizient sein.

Übrigens mache ich das unter OpenBSD, aber das OS X awk sollte genauso funktionieren.


Ich bin unter OS X 10.11.2 und bekomme "awk: ungültige -v Option"
HaggleLad

In OS X benötigen Sie ein Leerzeichen zwischen vund RS. dhawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil

0

"pcregrep" kann sich auf einen älteren pcregrepund einen neueren Stall beziehen pcre2grep. Beide werden vom PCRE-Projekt unterpcre.org bereitgestellt .

Mac Ports bietet den ersteren als Teil des Ports pcre(stabil in Version 8.40) und den letzteren als Teil des Ports pcre2(derzeit Version 10.22). Installation über:

% sudo port install pcre2
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.