Para usar grepdos líneas diferentes, busque ambos patrones
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
O usa alternancia
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
Para obtener la siguiente línea después de un patrón, puede usar la opción de contexto
$ grep -A1 sweet file_type
This is a sweet
lemon.
Pero si usted está buscando de forma explícita para un patrón de líneas múltiples, eso es porque complicado greppiensa en líneas ... . Su .*capturará todo lo que entre "dulce" y "limón" en la línea . Podemos obtener "limón" en la siguiente línea con el -Puso \npara que coincida con la nueva línea y al decir que grepel archivo está nulo separado con -z:
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
Notas:
-EUse expresiones regulares extendidas (para usar |caracteres para alternar sin necesidad de escapar)
-An Imprima líneas adicionales después del patrón, donde n es el número de líneas finales para imprimir
-PUtilice expresiones regulares de estilo perl ("experimental" en grep- instalarpcregrep lugar para un mejor soporte de perl)
-zUse el carácter nulo como separador (solo finge en este caso, pero greptomará nuestra palabra)
Si bien el grep -zPcomando funcionaría en este caso específico (un archivo que consta de exactamente dos líneas), en general consideraría que cualquier archivo separado por una nueva línea es una sola línea, por lo tanto, volcar todo el contenido del archivo (si hay una coincidencia en alguna parte) o nada; por lo general, eso no es lo que la gente usa grep.
Marc van Leeuwen
sí, esto solo es útil con -o... editado ...
Zanna
En caso de que se intente en otras distribuciones, puede encontrar un: grep: The -P and -z options cannot be combined- por ejemplo, grep (GNU grep) 2.5.1 en RHEL
lo siento, pero esto coincidirá exactamente con "dulce | limón"
αғsнιη
44
@KasiyA Esta línea funciona bien. greppor defecto funciona en "modo estándar", donde "caracteres especiales" |, como +, *se interpretan literalmente a menos que estén enmascarados con una barra diagonal inversa. Ver por ejemplo esta respuesta . Para usar la forma en que probablemente esté acostumbrado, que los "caracteres especiales" necesitan ser enmascarados para ser interpretados literalmente, necesita cambiar al "modo extendido" ( grep -E). Tal vez Madneon podría dar más detalles sobre sus respuestas, por ejemplo, ¿qué habría intentado con los OP ?
grep -zP
comando funcionaría en este caso específico (un archivo que consta de exactamente dos líneas), en general consideraría que cualquier archivo separado por una nueva línea es una sola línea, por lo tanto, volcar todo el contenido del archivo (si hay una coincidencia en alguna parte) o nada; por lo general, eso no es lo que la gente usagrep
.-o
... editado ...grep: The -P and -z options cannot be combined
- por ejemplo, grep (GNU grep) 2.5.1 en RHELMe gusta esto:
fuente
grep
por defecto funciona en "modo estándar", donde "caracteres especiales"|
, como+
,*
se interpretan literalmente a menos que estén enmascarados con una barra diagonal inversa. Ver por ejemplo esta respuesta . Para usar la forma en que probablemente esté acostumbrado, que los "caracteres especiales" necesitan ser enmascarados para ser interpretados literalmente, necesita cambiar al "modo extendido" (grep -E
). Tal vez Madneon podría dar más detalles sobre sus respuestas, por ejemplo, ¿qué habría intentado con los OP ?