Expressões regulares e globbing de nomes de arquivos são duas coisas muito diferentes.
Expressões regulares são usadas em comandos / funções para correspondência de padrões no texto. Por exemplo, no parâmetro padrão de grep
ou nas linguagens de programação.
A globbing de nomes de arquivos é usada por shells para corresponder nomes de arquivos e diretórios usando curingas. Os recursos de globbing dependem do shell. O Bash, por exemplo, suporta curingas como:
-
*
corresponde a 0 ou mais caracteres -
?
corresponde a 1 caractere -
[...]
corresponde a um caractere no conjunto especificado
Esses curingas podem ser semelhantes a expressões regulares, de fato [...]
tem o mesmo significado em globbing e regex. Mas *
e ?
significam coisas diferentes em globbing e regex.
Em um comentário que você escreveu:
mas como a diferença do intérprete * se é um joker ou regex? por exemplo:
grep a*b a*.txt
?
Fácil. Mais ou menos.
Antes de mais nada, o shell tenta interpretar os curingas, combinando-os com nomes de arquivos. Se houver arquivos começando com "a" e terminando com "b", o shell substituirá a*b
pelos nomes de arquivos correspondentes. O mesmo vale para a*.txt
. Se não houver nomes de arquivos correspondentes, o shell passará os argumentos para grep
como eram, literalmente.
No entanto, o primeiro parâmetro de grep
deve ser um padrão.
Em 99,999% dos casos de uso prático, você não quer que o primeiro parâmetro seja interpretado pelo shell. Então, provavelmente, a intenção era esta:
grep "a*b" a*.txt
Graças à citação de a*b
, o shell não irá interpretá-lo usando globbing e passará diretamente para grep
. Por sua vez, grep
interpretará isso
como uma expressão regular (por design).
Para resumir, o shell interpreta a linha de comando seguindo sua própria linguagem globbing, que está usando curingas. Comandos, programas interpretam seus parâmetros da maneira que foram projetados por seus autores.