¿Existe un comando en Mac OS X que pueda realizar búsquedas de expresiones regulares multilínea?

12

Quiero hacer una búsqueda simple de expresiones regulares de forma recursiva a través de un directorio que no esté restringido a líneas simples.

Intenté grep and ack, pero ninguno parece apoyar esto.

Sé que no debería ser demasiado costoso desde el punto de vista computacional (en mi caso) porque mi editor de texto de elección ( Sublime Text ) puede hacerlo bien.

Solo estoy buscando una versión simple de línea de comandos de esto. Google ha aparecido pcregrep , pero parece que no puedo encontrar eso para Mac. ¿No estoy buscando en el lugar correcto?

Dan Tao
fuente
1
Sería útil dar un ejemplo de lo que está buscando. ¿Y grepcon el contexto te ayuda a encontrar lo que quieres ( -C1)?
mbb

Respuestas:

15

Instala Homebrew y luego:

brew install pcre

Esto te dará lo último pcregrep

Tobia
fuente
1

No dijiste exactamente lo que estabas buscando, así que me imagino la tarea de averiguar si el archivo contiene 112 seguido de 223, sin tener en cuenta las nuevas líneas.

Una awksolución ligeramente artificial :

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

La RSvariable contiene el separador de registros. Al establecerlo en la cadena vacía, todo el archivo se leerá como un registro.

Esto probablemente será muy ineficiente de memoria en archivos grandes.

Por cierto, estoy haciendo esto en OpenBSD, pero el OS X awk debería funcionar de la misma manera.

Kusalananda
fuente
Estoy en OS X 10.11.2 y obtengo "awk: opción inválida -v"
HaggleLad
en OS X necesitas un espacio entre vy RS. es decirawk -v RS='' '/112.*223/ { print "found it"; exit }' file.in
Neil
0

"pcregrep" puede referirse a un establo más antiguo pcregrepy uno más nuevo pcre2grep. Ambos son proporcionados por el proyecto PCRE enpcre.org .

Mac Ports proporciona el primero como parte del puerto pcre(estable en la versión 8.40), y el segundo como parte del puerto pcre2(actualmente versión 10.22). Instalar a través de:

% sudo port install pcre2
Jim DeLaHunt
fuente