Eu tenho tentado criar uma seqüência de comando find que encontrará todos os arquivos que terminam com um número de 1 a 99, mas exclui todos os outros.
por exemplo, eu quero encontrar meuarquivo1 meuarquivo99, mas não meuarquivo456 e não meuarquivo de backup
O regex que estou pensando é, myfile[1-9]{1,2}
mas não consigo fazer isso funcionar com o find.
find . -regex '.*myfile[0-9]{1,2}'
OU
find . -iname 'myfile[0-9]{1,2}'
Pelo que vejo, é a {1,2}
parte que não está funcionando.
(a propósito, você pode usar de forma -name -regex
intercambiável?)
Qualquer ajuda apreciada.
bash
find
regular-expression
Lukas88
fonte
fonte
-iname
(e-name
) use globs , que não possuem essa sintaxe.Respostas:
Você poderia tentar
ou
fonte
Se você encontrar o GNU, poderá usar outro tipo de expressão regular:
De acordo com o GNU,
find
usa uma sintaxe de expressão regular do Emacs castrada por padrão - o Emacs suporta a sintaxe, mas pelo menos o GNU não a suporta.\{from,to\}
find
Estranhamente, o manual de referência não inclui uma seção sobre a
sed
sintaxe da expressão regular, então quem sabe quais partes dele são suportadas.fonte
sed
likeed
parece ser um alias paraposix-basic
, então deve ser compatível com POSIX BRE (embora suporte algumas extensões como\+
). Não é compatível com o GNU,sed
por exemplo,[\n]
corresponde a uma nova linha em vez da barra invertida oun
exigida pelo POSIX. Veja também-regextype posix-extended
para EREs POSIX (também.*myfile[0-9]{1,2}
), também com extensões como\s
ou\<
-regextype egrep
, pode evitar as barras invertidas.