Como grep para pipe |


14

Como posso grep para a linha que contém o caractere de pipe |ou o caractere >:

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

agora o que eu preciso usando o comando grep é

grep -iE "<some expression>" file_name

Resultado:

|this is test
where is >

Respostas:


10

Com grepsintaxe padrão :

grep '[>|]'

ou

grep -e '>' -e '|'

ou

grep '>
|'

ou

grep -E '>|\|'

6

Se você estiver usando o GNU grep, poderá fazer isso com o operador ou ( |), que deve ser escapado (precedido por uma barra invertida \). Portanto, para encontrar linhas que contêm pipe ou um sinal maior que, inclua-as literalmente no operador ou :

grep '|\|>' infile

Resultado:

|this is test
where is >

4
\|não é um padrão BREoperador, embora ele funciona com o GNU grepque é o grepencontrado na maioria dos sistemas operacionais construídos em torno de um kernel Linux.
Stéphane Chazelas

@ StephaneChazelas: obrigado por apontar isso, eu não estava ciente disso. Eu corrigi o texto.
Thor

1
Sim, o operador de alternância é a única adição real de EREs sobre os BREs, o restante ( +, ?) sendo açúcar sintático para \{1,\}e \{0,1\}. (por outro lado, EREs perder referências anteriores ( \(.\)\1), que são uma característica BRE apenas)
Stéphane Chazelas

1

Usando expressão de colchete para corresponder a um dos caracteres desejados:

grep "[|>]" infile

Resultado:

|this is test
where is >

3
Não há necessidade de um -iou -Eaqui.
Stéphane Chazelas

Isso é verdade, reconhecido.
Zagrimsan

0

A maneira correta de fazer isso é usar o sinalizador -e especificado pelo POSIX. Por exemplo:

grep -e '>\||' infile

1
grep -e '>' -e '|' infilefunciona também
#

2
-eé especificado pelo POSIX, mas não é útil aqui. \|não é especificado pelo POSIX.
Stéphane Chazelas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.