Regex dla „lub” wielu słów w grep


12
[Computer]$ grep "foo|bar" filename

Rozumiem, że powyższe polecenie powinno zwracać każdą linię w nazwie pliku, z której wychodzi „foo” lub „bar”. Strony podręcznika potwierdzają | ponieważ Regex lub symbol i kod działają niezależnie dla „foo” i „bar”. czego mi brakuje?

Odpowiedzi:


21

grep domyślnie używa podstawowych wyrażeń regularnych (BRE). Ze strony podręcznika:

Podstawowe i rozszerzone wyrażenia regularne: w podstawowych wyrażeniach regularnych metaznaki?, +, {, |, (I) tracą swoje specjalne znaczenie; zamiast tego użyj wersji z odwrotnymi ukośnikami \ ?, +, {, \ |, (i).

Więc albo musisz uciec przed |:

grep "foo\|bar" filename 

lub włącz rozszerzone wyrażenia regularne:

grep -E "foo|bar" filename

Widziałem to na stronie podręcznika użytkownika i źle zrozumiałem. Myślałem, że to znaczy, że \ | sprawiłoby, że szukałoby pełnego wyrażenia „foo | bar” w przeciwieństwie do poszczególnych wyrażeń. Dzięki za szybką odpowiedź!
Ocasta Eshu

4
Możesz także użyć egrep(alias dla grep -E) zamiast grep.
przemówienie
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.