Extraer subcadena en Bash

Resuelto Berek Bryan asked hace 15 años • 26 respuestas

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.

Berek Bryan avatar Jan 09 '09 20:01 Berek Bryan
Aceptado

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.

JB. avatar Jan 09 '2009 15:01 JB.

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
FerranB avatar Jan 09 '2009 13:01 FerranB

solo intenta usarcut -c startIndx-stopIndx

brown.2179 avatar Sep 22 '2010 17:09 brown.2179