Curingas

Antes de falar sobre expressões regulares, vou falar um pouco sobre wildcards (curingas). Algumas ferramentas da linha de comando os suportam em nomes de arquivos.

Não confunda curingas com expressões regulares: expressões regulares são muito mais poderosas. Curingas são voltados para encontrar padrões em nomes de arquivos, e por isso são mais simples. Eles fornecem metacaracteres limitados para necessidades limitadas.

Expressões regulares tem um propósito mais geral, foram feitas para encontrar padrões de todos os tipos de complexidade em textos que podem ser muito longos. Por isso, elas oferecem metacaracteres ricos e expressivos para usos avançados.

Os curingas são case-sensitive, ou seja, eles diferenciam letras maiúsculas de minúsculas. Veja a seguir os curingas que podem ser usados na linha de comando na prática com alguns exemplos feitos com o comando ls (recomendo que você teste os exemplos na linha de comando do seu computador):

*
O asterisco é um curinga que casa com 0 ou mais caracteres, exceto um ponto no início do arquivo. Exemplos: ls c* (casa com c, casa, c22.zip), ls * (casa com todos os nomes de arquivos, exceto aqueles que começam com um ponto) e ls *p*s (casa com work.ps, _abcpes, 001.p2s).
?
Casa com qualquer caractere, exceto um ponto no início do arquivo. Ele precisa casar sempre com um caractere, nem mais nem menos. Exemplos: ls ?p* (casa com bp4, _presentes.pdf) e ls u? (casa com um u2, ul).
Classes de caracteres
São especificadas entre colchetes. O hífen é usado para definir um intervalo e também é possível usar ! para negar uma classe. Exemplos: [a-z] (casa com qualquer letra minúscula), [a-f] (casa com qualquer letra minúscula que esteja entre a e f), [0-9] (casa com qualquer dígito), [!2-7] (casa com qualquer caractere que não seja um dígito entre 2 e 7), [A-Z][0-9]*.zip (casa com C4.zip, F0-old.zip, B4p4.zip).