Jak grep na fajkę |


14

Jak mogę grepować dla wiersza zawierającego znak potoku |lub dla znaku >:

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

teraz potrzebuję polecenia grep

grep -iE "<some expression>" file_name

Wynik:

|this is test
where is >

Odpowiedzi:



6

Jeśli używasz GNU grep, możesz to zrobić za pomocą operatora lub ( |), który powinien być poprzedzony znakiem ucieczki (poprzedzonym odwrotnym ukośnikiem \). Aby znaleźć wiersze zawierające znak potoku lub znak większy niż, dołącz je dosłownie do operatora lub :

grep '|\|>' infile

Wynik:

|this is test
where is >

4
\|nie jest standardowym BREoperatorem, choć współpracuje z GNU, grepktóry grepwystępuje w większości systemów operacyjnych zbudowanych wokół jądra Linux.
Stéphane Chazelas,

@StephaneChazelas: dziękuję za zwrócenie na to uwagi, nie byłem tego świadomy. Poprawiłem tekst.
Thor

1
Tak, operator alternacji jest jedynym prawdziwym dodatkiem ERE w stosunku do BRE, a reszta ( +, ?) to cukier syntaktyczny dla \{1,\}i \{0,1\}. (z drugiej strony, ERE tracą referencje ( \(.\)\1), które są funkcją tylko BRE)
Stéphane Chazelas,

1

Używanie wyrażenia w nawiasach w celu dopasowania jednego z poszukiwanych znaków:

grep "[|>]" infile

Wynik:

|this is test
where is >

3
Nie ma potrzeby ani tutaj, -iani -Etutaj.
Stéphane Chazelas,

To prawda, potwierdzono.
zagrimsan,

0

Prawidłowym sposobem na osiągnięcie tego jest użycie flagi -e określonej przez POSIX. Na przykład:

grep -e '>\||' infile

1
grep -e '>' -e '|' infileteż działa.
ott--

2
-ejest określony przez POSIX, ale tutaj nie jest użyteczny. \|nie jest określony przez POSIX.
Stéphane Chazelas,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.