¿Cómo dar un patrón para una nueva línea en grep? Nueva línea al principio, nueva línea al final. No es la forma de expresión regular. Algo como \ n.
$. Es algo limitado, pero se puede utilizar en casos sencillos.
¿Cómo dar un patrón para una nueva línea en grep? Nueva línea al principio, nueva línea al final. No es la forma de expresión regular. Algo como \ n.
$. Es algo limitado, pero se puede utilizar en casos sencillos.
Respuestas:
grep los patrones se comparan con líneas individuales por lo que no hay forma de que un patrón coincida con una nueva línea encontrada en la entrada.
Sin embargo, puede encontrar líneas vacías como esta:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
intente en pcregreplugar de regular grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
la -Mopción le permite coincidir en varias líneas, por lo que puede buscar nuevas líneas como \n.
Puedes usar de esta manera ...
grep -P '^\s$' file
-Pse utiliza para expresiones regulares de Perl (una extensión de POSIX grep).\scoincidir con los caracteres de espacio en blanco; si le sigue *, también coincide con una línea vacía.^coincide con el comienzo de la línea. $coincide con el final de la línea. -Pes una extensión GNU. Estoy bien para usarlo cuando la situación lo requiere (generalmente mirar hacia adelante / mirar hacia atrás), pero POSIX grep puede hacer esto solo con el archivo [[:space:]].
-P. GNU es bastante estándar de todos modos. :)
brew install grepobtener GNU grep, que es superior en varios aspectos. apple.stackexchange.com/questions/193288/…
Gracias a @jarno, conozco la opción -z y descubrí que cuando se usa GNU grep con la opción -P, es posible realizar coincidencias\n . :)
Ejemplo:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Huellas dactilares bar
En cuanto a la solución alternativa (sin usar no portátil -P), puede reemplazar temporalmente un carácter de nueva línea por otro diferente y volver a cambiarlo, por ejemplo:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
Básicamente, busca una coincidencia exacta _foo_donde _significa \n(entonces __= \n\n). No tiene que volver a traducirlo tr '_' '\n', ya que cada patrón se imprimiría en la nueva línea de todos modos, por lo que eliminarlo _es suficiente.
<(p paste -sd_ file )?
new line at the beginninges una línea en blanco y senew line at endaplica a todas las líneas del archivo. Puede publicar un ejemplo?