Não sei se é conhecimento de todos mas o Bash possui, alem do globbing normal (a expansão * ? e [a-z] de nomes de arquivos e diretórios), um globbing extendido.
Acho que, em alguns casos, podera ser BEM util, eliminando um pipe para um grep por exemplo.
São eles (direto do man)
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches exactly one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
Para poder utiliza-lo precisa executar o shopt conforme o exemplo abaixo
$ shopt -s extglob
$ ls
file filename filenamename fileutils
$ ls file?(name) # padrão pode aparecer 0 a 1 vezes
file filename
$ ls file*(name) # padrão pode aparecer 0 a N vezes
file filename filenamename
$ ls file+(name) # padrão pode aparecer 1 a N vezes
filename filenamename
$ ls file@(name) # padrão deve aparecer 1 unica vez
filename
$ ls file!(name) # divertido esse! padrão NÃO deve aparecer
file filenamename fileutils
$ ls file+(name|utils) # cada padrão pode aparecer 1 a N vezes
filename filenamename fileutils
$ ls file@(name|utils) # "lembra" um file{name,utils} ;-)
filename fileutils
2 comentários:
Hail again Peczenyj. :)
Esse recurso extended globbing realmente é uma mão-na-roda. Isso sem falar em outros built-in do shell acessíveis pelo shopt. Lembrei de um comum q alguns odeiam, e tem quem goste: o cdspell; e mesmo o cmdhist.
No mais vale lembrar, pra quem visita, o óbvio desses globbings, q é um globbing poder "englobbar" outro. :P
Assim sendo: ls file!(+(name))
Eliminando qualquer ocorrência de name.
Até +.
NetWalker
Para um administrador é interessante saber as opções huponexit e restricted_shell -- e depois dizem que o shell é complicado.
Po é cada coisa util que tem :)
Postar um comentário