Como verificar se há um padrão correspondente no bash?

2

Eu tenho um arquivo no qual o valor começa com ABC ou ABD.

Depois de buscar o valor do arquivo de entrada, como verificar isso começa com ABC ou ABD?

por exemplo:

value=$(cat file | awk 'NF{print;exit}' | awk '{print }')

e agora quero verificar se esse valor $ está começando com ABC ou ABD. como?

    
por Anony 12.01.2018 / 04:35

2 respostas

6

Usando case

Para verificar se uma variável shell começa com ABC ou ABD, um método tradicional (e muito portátil) é usar uma instrução case:

case "$value" in
  AB[CD]*) echo yes;;
   *)      echo no;;
esac

Como isso não requer processos externos, deve ser rápido.

Usando [

Como alternativa, pode-se usar um comando teste :

if [ "${value#AB[CD]}" != "$value" ]
then
   echo yes
else
   echo no
fi

Isso também é bastante portátil.

Usando [[

Por último, pode-se usar o comando mais moderno e menos portátil test :

if [[ $value == AB[CD]* ]]
then
   echo yes
else
   echo no
fi

Lendo o arquivo e testando tudo em uma etapa

Para ler a primeira linha não vazia de um arquivo e testar se seu primeiro campo começa com ABC ou ABD:

awk 'NF{if (~/^AB[CD]/) print "yes"; else print "no";exit}' file
    
por John1024 12.01.2018 / 05:41
2

Tente isto:

 echo $value | grep -c "^AB[CD]"

Isso retornará 1 se o padrão estiver presente no começo.

    
por Jay 12.01.2018 / 04:59