Comment grep pour pipe |

14

Comment est-ce que je peux grep pour la ligne contenant le caractère pipe |ou pour le caractère >:

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

maintenant ce dont j'ai besoin en utilisant la commande grep est

grep -iE "<some expression>" file_name

Production:

|this is test
where is >
Özzesh
la source

Réponses:

10

Avec une grepsyntaxe standard :

grep '[>|]'

ou

grep -e '>' -e '|'

ou

grep '>
|'

ou

grep -E '>|\|'
Stéphane Chazelas
la source
6

Si vous utilisez GNU grep, vous pouvez le faire avec l' opérateur or ( |), qui doit être échappé (précédé d'une barre oblique inverse \). Donc, pour trouver des lignes contenant un tuyau ou un signe supérieur à, incluez-les littéralement avec l' opérateur or :

grep '|\|>' infile

Production:

|this is test
where is >
Thor
la source
4
\|n'est pas un BREopérateur standard , bien qu'il fonctionne avec le GNU grepqui se greptrouve dans la plupart des systèmes d'exploitation construits autour d'un noyau Linux.
Stéphane Chazelas
@StephaneChazelas: merci de l'avoir signalé, je n'étais pas au courant. J'ai corrigé le texte.
Thor
1
Oui, l'opérateur d'alternance est le seul véritable ajout d'ERE sur les BRE, le reste ( +, ?) étant le sucre syntaxique pour \{1,\}et \{0,1\}. (d'un autre côté, les ERE perdent les références arrières ( \(.\)\1) qui ne sont qu'une fonctionnalité BRE)
Stéphane Chazelas
1

Utilisation d'une expression entre crochets pour faire correspondre l'un des caractères souhaités:

grep "[|>]" infile

Production:

|this is test
where is >
zagrimsan
la source
3
Pas besoin non plus -ini -Eici.
Stéphane Chazelas
C'est vrai, reconnu.
zagrimsan
0

La façon correcte de le faire est d'utiliser l'indicateur -e qui est spécifié par POSIX. Par exemple:

grep -e '>\||' infile
Valentin Bajrami
la source
1
grep -e '>' -e '|' infilefonctionne aussi.
ott--
2
-eest spécifié par POSIX mais n'est pas utile ici. \|n'est pas spécifié par POSIX.
Stéphane Chazelas