3 votos

Extraer números de una cadena de caracteres utilizando el shell

Utilizando el shell script, ¿cómo puedo extraer dos conjuntos de números de una cadena como "R14C11"? Me gustaría obtener el resultado como una lista de AppleScript.

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

"R" y "C" serán constantes, pero el número de dígitos de cada conjunto de números puede variar.

2voto

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

0 votos

A menos que me esté perdiendo algo, en su forma original aquí sed devuelve una cadena de: "{5, 9}", no una lista de enteros en Applescript: {5, 9}. Sin embargo, lo he modificado basándome en tu respuesta. Gracias.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X