3 votes

Extraire les chiffres d'une chaîne de caractères à l'aide du shell

À l'aide de l'interpréteur de commandes script, comment puis-je extraire deux ensembles de chiffres d'une chaîne comme "R14C11" ? J'aimerais obtenir le résultat sous forme de liste AppleScript.

R14C11 -> {14, 11}
R5C9   -> {5, 9}

"R" et "C" seront des constantes mais le nombre de chiffres dans chaque série de chiffres peut varier.

2voto

nohillside Points 82672

Il y a plusieurs façons de faire cela, l'une d'entre elles est d'utiliser sed

echo R5C9 | sed -E 's|R(.*)C(.*)|{\1, \2}|'

Ou, si vous voulez vous assurer que seules les entrées ayant le bon format seront appariées

echo R5C9 | sed -E 's|R([[:digit:]]+)C([[:digit:]]+)|{\1, \2}|'

Quelques explications :

  • -E permet d'utiliser des expressions régulières étendues, ce qui facilite, entre autres, la correspondance du motif.
  • s|SOURCE|TARGET| est la commande de substitution pour transformer SOURCE en TARGET
  • R([[:digit:]]+)C([[:digit:]]+) est le modèle source que nous recherchons : Un site R suivi d'au moins un chiffre [[:digit:]]+ suivi par C suivi à nouveau d'au moins un chiffre
  • La cible remplace la source appariée, avec \1 correspondant au texte trouvé dans la première () dans la source, \2 pour le deuxième

Vous pouvez aussi simplement utiliser bash lui-même

[[ "R5C9" =~ R([0-9]+)C([0-9]+) ]] && echo "{${BASH_REMATCH[1]}, ${BASH_REMATCH[2]}}"
  • [[ "R5C9" =~ R([0-9]+)C([0-9]+) ]] correspond au texte, avec R([0-9]+)C([0-9]+) étant fondamentalement le même que le modèle source ci-dessus
  • Pièces correspondantes dans () sont assignés au tableau de l'obus BASH_REMATCH
  • El echo n'est exécuté que si la correspondance ( [[ ... ]] ) a réussi, puis imprime l'expression reformatée (ce qui est un peu confus à lire parce que les différents éléments de l'équation {} signifient des choses différentes...)

0 votes

A moins que je ne manque quelque chose, dans sa forme originale, ici sed retourne une chaîne de : "{5, 9}", et non une liste Applescript réelle d'entiers : {5, 9}. Je l'ai cependant bricolé en me basant sur votre réponse. Merci !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X