Necesitaba encontrar todos los archivos que contenían un patrón de cadena específico. La primera solución que viene a la mente es usar find piped with xargs grep :
find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'
Pero si necesito encontrar patrones que abarquen más de una línea, estoy atascado porque grep vainilla no puede encontrar patrones multilínea.

Respuestas:
Entonces descubrí pcregrep que significa Perl Compatible Expresiones regulares GREP .
Por ejemplo, debe buscar archivos donde la variable ' _name ' sea seguida inmediatamente por la variable ' _description ':
Consejo: debe incluir el carácter de salto de línea en su patrón. Dependiendo de su plataforma, podría ser '\ n', \ r ',' \ r \ n ', ...
fuente
pcregrepestá disponible en Mac conbrew install pcre-Hque imprime el nombre del archivo antes de cada partido:pcregrep -HM.¿Por qué no vas por awk ?
fuente
awkque vienen con la mayoría de los sistemas * nix.awk '/Start pattern/,/End pattern/ {printf NR " "; print}' filename. Puede que sea más bonita dando a los números de línea un ancho fijo:awk '/Start pattern/,/End pattern/ {printf "%-4s ", NR; print}' filename.Aquí está el ejemplo usando GNU
grep:Mira también aquí
fuente
-zpor lo que no divide la búsqueda en una sola línea, e-oimprimir solo la parte coincidente.grep -rzl pattern *, -rzo no funcionó)brew reinstall --with-pcre gitgrep -Ptambién usa libpcre, pero está mucho más instalado. Para encontrar unatitlesección completa de un documento html, incluso si abarca varias líneas, puede usar esto:Dado que el proyecto PCRE se implementa según el estándar perl, use la documentación perl como referencia:
fuente
Aquí hay un ejemplo más útil:
Busca la etiqueta del título en un archivo html incluso si abarca hasta 5 líneas.
Aquí hay un ejemplo de líneas ilimitadas:
fuente
(?s)a su expresión regular, así:"(?s)<html>.*</html>"$(al final de un patrón) para indicar que es el final de la línea, aunque eso no es lo mismo que ayudarlo a encontrar múltiples patrones de línea. Ver tambiénglob(7). También puede encontrar este sitio de interés: regular-expressions.infoCon buscador de plata :
Las optimizaciones de velocidad del buscador de plata posiblemente podrían brillar aquí.
fuente
Se puede utilizar la alternativa grep tamizar aquí (exención de responsabilidad: yo soy el autor).
Admite la coincidencia multilínea y limita la búsqueda a tipos de archivo específicos listos para usar:
(busque en todos los archivos * .py el patrón de expresión regular multilínea especificado)
Está disponible para todos los principales sistemas operativos. Eche un vistazo a la página de muestras para ver cómo se puede utilizar para extraer valores de varias líneas de un archivo XML.
fuente
Esta respuesta puede ser útil:
Regex (grep) para búsqueda multilínea necesaria
Para buscar de forma recursiva, puede usar los indicadores -R (recursivo) e --incluir (patrón GLOB). Ver:
Utilice grep --exclude / - incluya la sintaxis para no grep a través de ciertos archivos
fuente
@Marcin: awk ejemplo no codicioso:
fuente
fuente
Usando
ex/vieditor y la opción globstar (sintaxis similar aawkysed):donde
aaaes su punto de partida ybbbes su texto final.Para buscar de forma recursiva, intente:
Nota: Para habilitar la
**sintaxis, ejecuteshopt -s globstar(Bash 4 o zsh).fuente