Eu respondi a essa pergunta no SuperUser que era algo relacionado ao tipo de expressões regulares usadas ao grepping uma saída.
A resposta que dei foi esta:
tail -f log | grep "some_string.*some_string"
E então, em três comentários à minha resposta, o @Bob escreveu isso:
.*é ganancioso e pode capturar mais do que você deseja..*?geralmente é melhor.
Então isso,
o
?é um modificador ativado*, tornando-o preguiçoso em vez do padrão ganancioso. Supondo PCRE.
Pesquisei no Google PCRE, mas não consegui entender qual é o significado disso na minha resposta?
e finalmente isso,
Devo também salientar que isso é regex (grep executando o POSIX regex por padrão), não um shell glob.
Eu só sei o que é um Regex e o uso muito básico dele no comando grep. Portanto, não consegui receber nenhum desses três comentários e tenho estas perguntas em mente:
- Quais são as diferenças no uso de
.*?contra.*? - Qual é o melhor e sob que circunstância? Por favor, forneça exemplos.
Também seria útil entender os comentários, se alguém puder
ATUALIZAÇÃO: Como resposta à pergunta Como o Regex difere do Shell Globs? @Kusalananda forneceu este link em seu comentário.
NOTA: Se necessário, leia minha resposta a esta pergunta antes de responder por se referir ao contexto.
.*vs. .*?A questão "diferença entre expressões regulares e shell globs" já foi abordada neste site.