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...)