Os shells geralmente não fornecem a sintaxe usual de regexp, mas os padrões "glob" de curingas. Os curingas básicos do shell não são tão poderosos quanto as expressões regulares; por exemplo, o regexp .*
(qualquer sequência de caracteres) é equivalente ao padrão de glob *
, mas o regexp a*
(qualquer sequência de a
's) não tem padrão glob equivalente no sh simples. Veja Por que minha expressão regular trabalho em X, mas não em Y? para uma visão geral das principais sintaxes diferentes de regexp / padrão.
Zsh tem padrões de glob estendido zsh que fornecem o mesmo poder expressivo que expressões regulares mas com sintaxe diferente. Esses padrões são habilitados automaticamente em zmv
e em funções de conclusão, mas em outros lugares em zsh eles precisam ser habilitados explicitamente com setopt extended_glob
(coloque isso em seu .zshrc
- a única razão pela qual não é o padrão é compatibilidade com versões anteriores versões antigas do zsh).
Existe uma sintaxe repeat-N-times, mas é um pouco oculta, listada em globbing flags em vez de estar na lista de operadores. É o c
flag, que deve ser usado sozinho, seguido pelo número de repetições (ou dois números separados por vírgula para fornecer um intervalo).
zmv -n '(**/)(*)' '$1${2//-[A-Za-z0-9](#c32)/}'