Come fare grep per pipe |


14

Come posso grep per la riga che contiene il carattere pipe |o per il personaggio >:

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

ora quello che mi serve usando il comando grep è

grep -iE "<some expression>" file_name

Produzione:

|this is test
where is >

Risposte:



6

Se stai usando GNU grep puoi farlo con l' operatore o ( |), che dovrebbe essere evitato (preceduto da una barra rovesciata \). Quindi, per trovare le righe contenenti pipe o un segno maggiore di, includerle letteralmente con l' operatore o :

grep '|\|>' infile

Produzione:

|this is test
where is >

4
\|non è un BREoperatore standard , sebbene funzioni con GNU grepche si greptrova nella maggior parte dei sistemi operativi basati su un kernel Linux.
Stéphane Chazelas,

@StephaneChazelas: grazie per averlo segnalato, non ne ero a conoscenza. Ho corretto il testo.
Thor,

1
Sì, l'operatore di alternanza è l'unica vera aggiunta di ERE su BRE, il resto ( +, ?) è lo zucchero sintattico per \{1,\}e \{0,1\}. (d'altra parte, i riferimenti all'indietro allentati di ERE ( \(.\)\1) che sono solo una caratteristica BRE)
Stéphane Chazelas

1

Utilizzo dell'espressione parentesi per abbinare uno dei caratteri desiderati:

grep "[|>]" infile

Produzione:

|this is test
where is >

3
Non c'è bisogno di nessuno dei due -io -Equi.
Stéphane Chazelas,

È vero, riconosciuto.
Zagrimsan,

0

Il modo corretto per farlo è usare -e flag che è specificato da POSIX. Per esempio:

grep -e '>\||' infile

1
grep -e '>' -e '|' infilefunziona anche.
ott--

2
-eè specificato da POSIX ma non è utile qui. \|non è specificato da POSIX.
Stéphane Chazelas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.