Filtrar itens de uma matriz com base na entrada com curinga

4

Eu tenho um array vindo da saída de um comando:

array=(saf sri trip tata strokes)

Agora quero filtrar itens com base na entrada do usuário. O usuário também pode usar curingas, portanto, se o usuário inserir *tr* , a saída deverá ser

trip strokes
    
por Sharique 07.12.2016 / 16:45

2 respostas

6

É mais fácil com zsh :

$ array=(saf sri trip tata strokes)
$ pattern='*tr*'
$ printf '%s\n' ${(M)array:#$~pattern}
trip
strokes
  • ${array:#pattern} : expande para os elementos da matriz que não correspondem ao padrão.
  • (M) (para correspondência): reverte o significado do operador :# para expandir para os elementos que correspondem em seu lugar
  • $~pattern , faz com que o conteúdo de $pattern seja tomado como um padrão.
por 07.12.2016 / 17:22
5

Uma maneira de fazer isso:

array=(saf sri trip tata strokes)                      
input=*tr*
for foo in "${array[@]}"; do
    case "$foo" in
        $input) printf '%s\n' "$foo" ;;
    esac
done

Nota para os citadores excessivamente entusiasmados: o lado direito nas atribuições (como *tr* in input=*tr* ) não precisa ser citado.

    
por 07.12.2016 / 17:20