Hay muchas formas de hacerlo, una de ellas es utilizar sed
echo R5C9 | sed -E 's|R(.*)C(.*)|{\1, \2}|'
O bien, si quiere asegurarse de que sólo se cotejen las entradas con el formato correcto
echo R5C9 | sed -E 's|R([[:digit:]]+)C([[:digit:]]+)|{\1, \2}|'
Algunas explicaciones:
-
-E
permite las expresiones regulares extendidas, lo que, entre otras cosas, facilita la coincidencia del patrón
-
s|SOURCE|TARGET|
es el comando de sustitución para transformar SOURCE
en TARGET
-
R([[:digit:]]+)C([[:digit:]]+)
es el patrón de origen que estamos buscando: Un R
seguido de al menos un dígito [[:digit:]]+
seguido de C
seguido de nuevo por al menos un dígito
- El objetivo sustituye a la fuente coincidente, con
\1
para el texto que coincide con el primer ()
en la fuente, \2
para el segundo
También puede utilizar simplemente bash
sí mismo
[[ "R5C9" =~ R([0-9]+)C([0-9]+) ]] && echo "{${BASH_REMATCH[1]}, ${BASH_REMATCH[2]}}"
-
[[ "R5C9" =~ R([0-9]+)C([0-9]+) ]]
coincide con el texto, con R([0-9]+)C([0-9]+)
siendo básicamente lo mismo que el patrón de origen anterior
- Piezas coincidentes dentro de
()
se asignan a la matriz de la cáscara BASH_REMATCH
- El
echo
sólo se ejecuta si la coincidencia ( [[ ... ]]
) tuvo éxito, y luego imprime la expresión reformateada (que es un poco confusa de leer porque los distintos {}
significan cosas diferentes...)