Wie greife ich nach Pfeife?


14

Wie kann ich nach einer Zeile mit einem Pipe-Zeichen |oder nach einem Zeichen suchen >:

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

Was ich jetzt mit grep Befehl brauche, ist

grep -iE "<some expression>" file_name

Ausgabe:

|this is test
where is >

Antworten:


10

Mit Standard- grepSyntax:

grep '[>|]'

oder

grep -e '>' -e '|'

oder

grep '>
|'

oder

grep -E '>|\|'

6

Wenn Sie GNU grep verwenden, können Sie dies mit dem Operator oder ( |) tun , dem ein Backslash vorangestellt werden soll \. Um also Zeilen zu finden, die entweder eine Pipe oder ein Größer-als-Zeichen enthalten, schließen Sie sie wörtlich mit dem Operator oder ein :

grep '|\|>' infile

Ausgabe:

|this is test
where is >

4
\|kein Standard ist BREOperator, wenn es mit der GNU arbeitet , grepdie das ist grepbei den meisten anderen Betriebssystemen um einen Linux - Kernel integriert.
Stéphane Chazelas

@StephaneChazelas: Danke für den Hinweis, ich war mir dessen nicht bewusst. Ich habe den Text korrigiert.
Thor

1
Ja, der Alternationsoperator ist die einzige echte Hinzufügung von EREs gegenüber BREs, der Rest ( +, ?) ist syntaktischer Zucker für \{1,\}und \{0,1\}. (Auf der anderen Seite verlieren EREs Rückverweise ( \(.\)\1), die nur eine BRE-Funktion sind)
Stéphane Chazelas

1

Verwenden des Klammerausdrucks, um eines der gewünschten Zeichen zu finden:

grep "[|>]" infile

Ausgabe:

|this is test
where is >

3
Keine Notwendigkeit für entweder -ioder -Ehier.
Stéphane Chazelas

Das ist wahr, anerkannt.
Zagrimsan

0

Der richtige Weg, dies zu erreichen, ist die Verwendung des von POSIX angegebenen Flags -e. Z.B:

grep -e '>\||' infile

1
grep -e '>' -e '|' infilefunktioniert auch.
ott--

2
-ewird von POSIX angegeben, ist aber hier nicht nützlich. \|wird von POSIX nicht angegeben.
Stéphane Chazelas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.