varios varias una texto test solo siguientes regulares regresará que patrones palabras palabra líneas los fichero expresiones exacta egrep cuál con comiencen comandos cadena buscar archivos linux command-line grep find pcregrep

linux - varias - grep varios patrones



¿Cómo puedo buscar un patrón de líneas múltiples en un archivo? (11)

Necesitaba encontrar todos los archivos que contenían un patrón de cadena específico. La primera solución que se me viene a la mente es usar find hilo con 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 la greda de vainilla no puede encontrar patrones de líneas múltiples.


¿Por qué no vas por awk ?

awk ''/Start pattern/,/End pattern/'' filename


@Marcin: awk ejemplo no codicioso:

awk ''{if ($0 ~ /Start pattern/) {triggered=1;}if (triggered) {print; if ($0 ~ /End pattern/) { exit;}}}'' filename


Aquí está el ejemplo usando GNU grep :

grep -Pzo ''_name.*/n.*_description''

-z / --null-data Tratar los --null-data entrada y salida como secuencias de líneas.


Aquí hay un ejemplo más útil:

pcregrep -Mi "<title>(.*/n){0,5}</title>" afile.html

Busca en la etiqueta del título en un archivo html, incluso si se extiende en varias líneas.


Así que descubrí pcregrep que significa Perl Compatible Regular Expressions GREP .

Por ejemplo, necesita encontrar archivos donde la variable '' _name '' es seguida inmediatamente por la variable '' _description '':

find . -iname ''*.py'' | xargs pcregrep -M ''_name.*/n.*_description''

Sugerencia: 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 '', ...


Con buscador de plata :

ag ''abc.*(/n|.)*efg''

Las optimizaciones de velocidad del buscador de plata podrían brillar aquí.



Puede usar grep sift sift aquí (descargo de responsabilidad: soy el autor).

Admite la coincidencia de líneas múltiples y limita la búsqueda a tipos de archivos específicos listos para usar:

sift -m --files ''*.py'' ''YOUR_PATTERN''

(buscar todos los archivos * .py para 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 usar para extraer valores de líneas múltiples de un archivo XML.


Usando el editor ex / vi y la opción globstar (sintaxis similar a awk y sed ):

ex +"/string1/,/string3/p" -R -scq! file.txt

donde aaa es su punto de partida, y bbb es su texto final.

Para buscar recursivamente, intente:

ex +"/aaa/,/bbb/p" -scq! **/*.py

Nota: Para habilitar la sintaxis ** , ejecute shopt -s globstar (Bash 4 o zsh).



perl -ne ''print if (/begin pattern/../end pattern/)'' filename