J'écris un script bash et je dois vérifier si un nom de fichier a un numéro à la fin (après un point) et si c'est le cas, mais je ne peux pas comprendre comment utiliser l'expression régulière sur une variable ou une chaîne.
J'ai pu utiliser echo
dans le terminal pour diriger une chaîne dans grep, comme ceci:
echo "filename.txt.123" | egrep -o "\.[0-9]+$" | egrep -o "[0-9]+"
Mais je dois assigner la sortie de ceci à une variable. J'ai essayé de faire ceci:
revNumber= echo "filename.txt.123" | egrep -o "\.[0-9]+$" | egrep -o "[0-9]+"
Mais ça ne marche pas. J'ai aussi essayé d'autres choses, mais rien n'était valable.
Dans mon script bash, je veux utiliser grep sur une variable et non sur une chaîne, mais le concept est le même.
Comment puis-je utiliser grep sur une chaîne ou une variable puis sauvegarder le résultat dans une autre variable?
r=`echo abc`
echo $ rRéponses:
Pour affecter le résultat d'une commande à une variable, utilisez
$()
:Si tout ce qui vous intéresse est de faire correspondre , vous voudrez peut-être envisager
case
:la source
$()
forme.``
c'est du style ancien;$()
est plus propre.Pourquoi le grep et echo E / O overkill, je suggère d'utiliser des capacités de traitement de chaîne bash:
La regex peut être optimisée et n'est pas parfaite, mais voici les bases:
Découvrez les autres capacités de manipulation de chaînes bash sur TLDP ici .
la source
Ce qui suit est une autre option qui utilise une comparaison de regex bash avant d’extraire la valeur à la fin de la chaîne.
la source