Extraer subcadena en Bash
Dado un nombre de archivo en el formulario someletters_12345_moreleters.ext
, quiero extraer los 5 dígitos y ponerlos en una variable.
Entonces, para enfatizar el punto, tengo un nombre de archivo con x número de caracteres, luego una secuencia de cinco dígitos rodeada por un guión bajo en cada lado y luego otro conjunto de x número de caracteres. Quiero tomar el número de 5 dígitos y ponerlo en una variable.
Estoy muy interesado en la cantidad de formas diferentes en que esto se puede lograr.
Puede utilizar la expansión de parámetros para hacer esto.
Si a es constante, la siguiente expansión de parámetros realiza la extracción de subcadenas:
b=${a:12:5}
donde 12 es el desplazamiento (basado en cero) y 5 es la longitud
Si los guiones bajos alrededor de los dígitos son los únicos en la entrada, puede eliminar el prefijo y el sufijo (respectivamente) en dos pasos:
tmp=${a#*_} # remove prefix ending in "_"
b=${tmp%_*} # remove suffix starting with "_"
Si hay otros guiones bajos, probablemente sea factible de todos modos, aunque sea más complicado. Si alguien sabe cómo realizar ambas expansiones en una sola expresión, a mí también me gustaría saberlo.
Ambas soluciones presentadas son puramente bash, sin ningún proceso involucrado, por lo que son muy rápidas.
Usar corte :
echo 'someletters_12345_moreleters.ext' | cut -d'_' -f 2
Más genérico:
INPUT='someletters_12345_moreleters.ext'
SUBSTRING=$(echo $INPUT| cut -d'_' -f 2)
echo $SUBSTRING
solo intenta usarcut -c startIndx-stopIndx