web-dev-qa-db-fra.com

Comment vérifier un motif correspondant dans bash?

J'ai un fichier dans lequel la valeur commence par ABC ou ABD.

Après avoir récupéré la valeur du fichier d'entrée, comment vérifier qu'elle commence par ABC ou ABD?

par exemple:

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

et maintenant je veux vérifier que la valeur de $ commence par ABC ou ABD. Comment?

2
Anony

Utiliser case

Pour vérifier si une variable Shell commence par ABC ou ABD, une méthode traditionnelle (et très portable) consiste à utiliser une instruction case:

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

Parce que cela ne nécessite aucun processus externe, il devrait être rapide.

Utilisation de [

Alternativement, on peut utiliser une commande test:

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

C'est aussi assez portable.

Utilisation de [[

Enfin, on peut utiliser la commande plus moderne et moins portable test:

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

Lecture du fichier et test en une seule étape

Pour lire la première ligne non vide d'un fichier et vérifier si son premier champ commence par ABC ou ABD:

awk 'NF{if ($1~/^AB[CD]/) print "yes"; else print "no";exit}' file
6
John1024

Essaye ça:

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

Cela retournera 1 si le motif est présent au début.

2
Jay