Odpowiedziałem na to pytanie na SuperUser, które było związane z rodzajem wyrażeń regularnych używanych podczas grepowania wyniku.
Odpowiedź, którą podałem, była następująca:
tail -f log | grep "some_string.*some_string"
A potem w trzech komentarzach do mojej odpowiedzi @Bob napisał:
.*
jest chciwy i może uchwycić więcej, niż chcesz..*?
jest zwykle lepszy.
Wtedy to,
?
jest modyfikator na*
, co leniwy zamiast chciwy domyślnie. Zakładając PCRE.
Poszukałem wyszukiwarki Google PCRE
, ale nie mogłem zrozumieć, co to ma znaczyć w mojej odpowiedzi?
i na koniec to
Powinienem również zauważyć, że jest to wyrażenie regularne (domyślnie grep robi wyrażenie regularne POSIX), a nie glob powłoki.
Wiem tylko, czym jest Regex i bardzo podstawowe użycie go w poleceniu grep. Tak więc nie mogłem uzyskać żadnego z tych 3 komentarzy i mam na myśli następujące pytania:
- Jakie są różnice w wykorzystaniu
.*?
vs.*
? - Które jest lepsze i w jakich okolicznościach? Proszę podać przykłady.
Pomocne byłoby również zrozumienie komentarzy, gdyby ktokolwiek mógł
AKTUALIZACJA: Jako odpowiedź na pytanie Czym Regex różni się od Shell Globs? @Kusalananda podał ten link w swoim komentarzu.
UWAGA: W razie potrzeby przeczytaj moją odpowiedź na to pytanie, zanim odpowiesz na pytanie dotyczące kontekstu.
.*
vs. .*?
Pytanie o „różnicę między wyrażeniami regularnymi a globami powłoki” zostało już rozwiązane na tej stronie.