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

Respostas:

10

Com grepsintaxe padrão :

grep '[>|]'

ou

grep -e '>' -e '|'

ou

grep '>
|'

ou

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