Os shells têm caracteres curinga que diferem das sintaxes usuais de expressão regular: ?
para corresponder a qualquer caractere único, *
para corresponder a qualquer número de caracteres e [abc]
para corresponder a qualquer caractere único entre a
, b
ou c
. O comando a seguir mostra todos os arquivos cujo nome corresponde à expressão regular estendida¹ ((R|r)eading(T|t)est(D|d)ata)
no diretório atual:
echo *[Rr]eading[Tt]est[Dd]ata*
Se você quiser encontrar arquivos em subdiretórios, execute primeiro shopt -s globstar
(você pode colocar este comando em ~/.bashrc
). Isso ativa o padrão **
para corresponder a qualquer nível de subdiretórios:
echo **/*[Rr]eading[Tt]est[Dd]ata*
Os caracteres curinga da shell não são tão poderosos quanto as expressões regulares. Por exemplo, não há ou ( |
) operador. Você pode obter o poder das expressões regulares, mas com uma sintaxe diferente por motivos históricos. Adicione shopt -s exgblob
ao seu .bashrc
, então você pode usar @(foo|bar)
para corresponder a foo
ou bar
(como foo|bar
em um ERE), *(pattern)
para corresponder a uma sequência qualquer número de ocorrências de pattern
(como (pattern)*
em um ERE), +(pattern)
para corresponder a uma ou mais ocorrências, ?(pattern)
para corresponder a zero ou uma ocorrência e !(pattern)
para corresponder a qualquer coisa, exceto pattern
(sem equivalente ERE). p>
¹ “Expressão regular estendida” (ERE abreviado) é o nome do unix da sintaxe de regex que o JavaScript usa.