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 >
Özzesh
fuente

Respuestas:

10

Con grepsintaxis estándar :

grep '[>|]'

o

grep -e '>' -e '|'

o

grep '>
|'

o

grep -E '>|\|'
Stéphane Chazelas
fuente
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 >
Thor
fuente
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 >
zagrimsan
fuente
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
Valentin Bajrami
fuente
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