czy grep regex działa inaczej na Macu?

6

Próbuję po prostu wymyślić podstawowe użycie wyrażeń regularnych z grep (lub egrep) w terminalu mac (BSD grep - 2.5.1-FreeBSD).

Plik do sprawdzenia ( pow.txt) zawiera linie:

kiytytytyty

i

blob.mkv

użyte polecenie to:

grep -E ^[a-z]+\.[a-z]{3}$i pow.txt

zwrócone dopasowanie to:

kiytytytyty

Oczywiście nie pasowałoby to do wyrażenia regularnego PCRE. Czy wyrażenia regularne są interpretowane inaczej na Macu? Czy moja składnia jest nieprawidłowa?

Rmy5
źródło
2
Jeśli próbujesz dopasować plik blob.mkv , spróbuj grep -Ei '^[a-z]+\.[a-z]{3}$' pow.txt.
dsstorefile1
1
@dsstorefile Cześć. Rozumiem, wyrażenie regularne musi być ustawione między cudzysłowami. ORAZ kropka musiała być uciekana ORAZ flaga bez rozróżniania wielkości liter musi być umieszczona jako część parametrów poleceń. :) Dzięki ! Myślę, że to zamyka temat.
Rmy5
2
Cóż, nie musisz tego cytować; możesz także uciec od wszystkich znaków, które mają specjalne znaczenie dla powłoki. Ale jest ich sporo i łatwo jest pomylić ucieczkę; cudzysłowy są prostsze. BTW, zamiast „ \.” możesz użyć „ [.]”, aby dopasować znak kropki, i możesz użyć [a-zA-Z]dla klas znaków zamiast -iopcji grep. Jest na to wiele sposobów!
Gordon Davisson
Czy możesz rozwinąć temat „Oczywiście, że to nie pasuje do wyrażenia regularnego PCRE” Nawiasem mówiąc, jest -P zamiast -E. -E jest ERE, (co jest lepsze niż BRE), ale -P jest bardziej równe niż ERE. Jest to wyrażenie regularne zgodne z Perlem, tj. (Tak sądzę!) PCRE. Również fakt, że kropka pasuje do dowolnego znaku .. i [.] Pasowałaby do dosłownej kropki. nie jest rzeczą specyficzną dla PCRE.
barlop
1
@dsstorefile Jeśli odpowiadasz na pytanie za pomocą komentarzy, twoje komentarze zasługują na odpowiedź, abyś mógł zyskać odpowiednią reputację.
JakeGould,

Odpowiedzi:

6

Jeśli próbujesz dopasować blob.mkv, spróbuj:

grep -Ei '^[a-z]+\.[a-z]{3}$' pow.txt
dsstorefile1
źródło
I nie; Wyrażenie regularne nie jest interpretowane inaczej na komputerze Mac. Ale twoja powłoka zjadła ukośnik odwrotny (i prawdopodobnie została zastąpiona $ipustym ciągiem, chyba że masz coś w tej zmiennej), ponieważ nie zacytowałeś wyrażenia regularnego.
tripleee
2
To powiedziawszy, składnia PCRE różni się od dialektu wyrażeń regularnych obsługiwanych przez grep -Ena każdej platformie, nie tylko na Macu. GNU grepma grep -Pskładnię PCRE; kiedyś istniał również na Macu, ale został usunięty z powodów, które tylko Apple może wyjaśnić. Być może przeczytaj o BRE vs ERE vs PCRE. Krótko mówiąc, \s \w \dprzyjaciele, spojrzenia, nazwane grupy, dopasowanie atomowe i niepochodne kwantyfikatory to tylko niektóre z funkcji obecnych tylko w PCRE.
tripleee