Dado un nombre de archivo de la forma algunas letras_12345_moreleters.ext
, quiero extraer los 5 dígitos y ponerlos en una variable.
Así que para enfatizar el punto, tengo un nombre de archivo con x número de caracteres y luego una secuencia de cinco dígitos rodeados por un solo guión bajo a 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 el número de maneras diferentes que esto se puede lograr.
Usa cortar:
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
Solución genérica en la que el número puede estar en cualquier parte del nombre del archivo, utilizando la primera de dichas secuencias:
number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)
Otra solución para extraer exactamente una parte de una variable:
number=${filename:offset:length}
Si su nombre de archivo siempre tiene el formato stuff_digits_...
puede utilizar awk:
number=$(echo $filename | awk -F _ '{ print $2 }')
Otra solución para eliminar todo excepto los dígitos, es utilizar
number=$(echo $filename | tr -cd '[[:digit:]]')