@OP,
Glob pettern não é usado apenas para nomes de arquivos?
Não, o padrão "glob" não é usado apenas para nomes de arquivos. você também pode usá-lo para comparar strings. Em seus exemplos, você pode usar case / esac para procurar padrões de strings.
gg=svm-grid-ch
# looking for the word "grid" in the string $gg
case "$gg" in
*grid* ) echo "found";;
esac
# [[ $gg =~ ^....grid* ]]
case "$gg" in ????grid*) echo "found";; esac
# [[ $gg =~ s...grid* ]]
case "$gg" in s???grid*) echo "found";; esac
No bash, quando usar o padrão glob e quando usar a expressão regular? Obrigado!
Regex são mais versáteis e "convenientes" do que "padrões glob", entretanto, a menos que você esteja fazendo tarefas complexas que "globbing / extendido" não podem fornecer facilmente, então não há necessidade de usar regex. Regex não tem suporte para a versão do bash <3.2 (como dennis mencionou), mas você ainda pode usar o globbing estendido (por configuração extglob
). para globbing estendido, veja aqui e alguns exemplos simples aqui .
Atualização para OP: exemplo para localizar arquivos que começam com 2 caracteres (os pontos "." Significa 1 caractere) seguido por "g" usando regex
por exemplo, saída
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Acima, os arquivos são correspondidos porque seus nomes contêm 2 caracteres seguidos de "g". (ou seja ..g
).
O equivalente com globbing será algo assim: (veja a referência para o significado de ?
e *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g