¿Cómo dar un patrón para una nueva línea en grep? Nueva línea al comienzo, nueva línea al final. No es el modo de expresión regular. Algo así como \ n.¿Cómo dar un patrón para una nueva línea en grep?
Respuesta
grep
patrones se combinan con líneas individuales, por lo que no hay forma de que un patrón coincida con una línea nueva que se encuentra en la entrada.
Sin embargo, usted puede encontrar líneas vacías como esto:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
Al menos GNU grep tiene la opción -z que hace que grep rompa líneas por carácter nulo. Sin embargo, no parece ser compatible con la nueva línea o \ n en el patrón para que coincida con la nueva línea, consulte [informe de errores] (https://bugs.launchpad.net/ubuntu/+source/grep/+bug/1641092). – jarno
@jarno Soporta \ n en patrones con la bandera -P – rubystallion
Se puede utilizar de esta manera ...
grep -P '^\s$' file
-P
se utiliza para las expresiones regulares de Perl (una extensión de POSIXgrep
)\s
coincide con los espacios en blanco; si va seguido de*
, también coincide con una línea vacía.^
coincide al principio de la línea.$
coincide con el final de la línea.
'-P' es una extensión de GNU.Estoy bien para usarlo cuando la situación lo requiera (normalmente mirar hacia adelante/mirar hacia atrás), pero POSIX grep puede hacer esto solo con '[[: espacio:]]'. – jordanm
Las páginas de manual de grep de FWIW, Solaris y BSD (no verificaron otras) tienen un párrafo para '-P'. GNU es bastante estándar de todos modos. :) –
+1 para perl regex :) – mattexx
tratar pcregrep
en lugar de regular de grep
:
pcregrep -M "pattern1.*\n.*pattern2" filename
la opción -M
permite que coincide a través de múltiples líneas, por lo que puede buscar nuevas líneas como \n
.
¡Exactamente estaba buscando, gracias! – yorch
En cuanto a la solución (sin usar no portátil -P
), puede reemplazar temporal nueva línea con diferente carácter y cambiarlo de nuevo, por ejemplo:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
donde está buscando coincidencia exacta _foo_
donde _
medios \n
(entonces __
= \n\n
). No tiene que volver a traducirlo por tr '_' '\n'
, ya que cada patrón se imprimirá en la nueva línea de todos modos, por lo que eliminar _
es suficiente.
Gracias a @jarno que sé acerca de la opción -z y descubrí que al usar GNU grep con la opción -P, juego contra \n
es posible. :)
Ejemplo:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
imprime bar
- 1. ¿Cómo evitar que grep imprima una nueva línea final?
- 2. Uso grep para que coincida con un patrón en una línea de una sola vez
- 3. cómo dar nueva línea en la sección mailmessage.body
- 4. ¿Cómo conservar el resultado de grep con nueva línea?
- 5. grep/grep rápido solo para el número de línea?
- 6. nueva línea después de asignar resultado grep para una concha variable de
- 7. Bash: patrón grep de salida de comando
- 8. búsqueda de una línea con un asterisco literal "*" en grep
- 9. En Eclipse, ¿cómo reemplazo un personaje por una nueva línea?
- 10. ¿Cómo reemplazar un personaje con una nueva línea en Emacs?
- 11. Añade una nueva línea a un NSString
- 12. cómo dar salida a cada línea en un archivo python
- 13. Cómo insertar un elemento textNode javascript en una nueva línea
- 14. línea en blanco después de cada resultado en grep
- 15. ¿Cómo hacer coincidir una cadena, ignorando la nueva línea final?
- 16. ¿Cómo agrego una nueva línea usando printf?
- 17. vim: reemplazar un patrón de línea por una línea no
- 18. ¿Cómo pegar una nueva línea con vim?
- 19. ¿Cómo hacer un diseño lineal para agregar una vista secundaria en una nueva línea?
- 20. Cómo "grep" rangos de línea específicos de un archivo
- 21. ¿Cómo generar una nueva línea en una macro cpp?
- 22. ¿Por qué partido grep todas las líneas para el patrón "\ '"
- 23. Cómo eliminar una línea completa que coincide con un patrón
- 24. Comience una nueva línea en wpf textbox
- 25. obtener una parte de una línea después de grep
- 26. ¿Agregar una nueva línea en el archivo?
- 27. Cómo convertir DOS/Windows nueva línea (CRLF) a Unix nueva línea (\ n) en un script Bash?
- 28. Shell: insertar un/nueva línea en blanco dos líneas anteriores patrón
- 29. ¿Cómo grep para incluir una palabra opcional?
- 30. Escritura de una nueva línea para presentar en PHP
No está claro lo que quiere. 'nueva línea al principio' es una línea en blanco y' nueva línea al final' se aplica a cada línea del archivo. Puede publicar un ejemplo? –
En realidad, puedes usar '$'. Es algo limitado, pero utilizable en casos simples. –
https://www.gnu.org/software/grep/manual/grep.html#Usage vea el ítem 15. – jarno