Cómo grep para tubería |


14

¿Cómo puedo grep para la línea que contiene el carácter de tubería |o para el carácter >:

files content:
|this is test
where is >
this is none

ahora lo que necesito usando el comando grep es

grep -iE "<some expression>" file_name

Salida:

|this is test
where is >

Respuestas:



6

Si está utilizando GNU grep, puede hacerlo con el operador o ( |), que debe escaparse (precedido por una barra invertida \). Entonces, para encontrar líneas que contengan una tubería o un signo mayor, inclúyalos literalmente con el operador o :

grep '|\|>' infile

Salida:

|this is test
where is >

44
\|no es un BREoperador estándar , aunque funciona con GNU, grepque se grepencuentra en la mayoría de los sistemas operativos creados en torno a un núcleo Linux.
Stéphane Chazelas

@StephaneChazelas: gracias por señalar esto, no estaba al tanto. Corrija el texto.
Thor

1
Sí, el operador de alternancia es la única adición real de ERE sobre BRE, el resto ( +, ?) es azúcar sintáctica para \{1,\}y \{0,1\}. (por otro lado, las ERE sueltan referencias ( \(.\)\1) que son una característica única de BRE)
Stéphane Chazelas

1

Usando la expresión de paréntesis para hacer coincidir cualquiera de los caracteres deseados:

grep "[|>]" infile

Salida:

|this is test
where is >

3
No hay necesidad de ninguno -ini de -Eaquí.
Stéphane Chazelas

Eso es cierto, reconocido.
zagrimsan

0

La forma correcta de lograrlo es utilizando el indicador -e que especifica POSIX. P.ej:

grep -e '>\||' infile

1
grep -e '>' -e '|' infiletambién funciona
ott--

2
-eestá especificado por POSIX pero no es útil aquí. \|no está especificado por POSIX.
Stéphane Chazelas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.