Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              Extraer la subcadena en Bash                                      20 respuestas                          
  •     
    

Quiero encontrar un comando de Linux que pueda devolver una parte de la cadena. En la mayoría de los lenguajes de programación, es la función substr () . ¿Bash tiene algún comando que pueda usarse para este propósito? Quiero poder hacer algo como esto ... substr " abcdefg " 2 3 - imprime cde .


Pregunta similar posterior:

¿Fue útil?

Solución

Si está buscando una utilidad de shell para hacer algo así, puede usar el comando cortar .

Para tomar su ejemplo, intente:

echo "abcdefg" | cut -c3-5

que rinde

cde

Donde -cN-M le dice al comando cut que devuelva las columnas N a M , inclusive.

Otros consejos

Desde la página de manual de bash:

${parameter:offset}
${parameter:offset:length}
        Substring  Expansion.   Expands  to  up  to length characters of
        parameter starting at the character  specified  by  offset.
[...]

O, si no está seguro de tener bash , considere usar cortar .

En " puro " bash tiene muchas herramientas para la manipulación de (sub) cadenas, principalmente, pero no exclusivamente en expansión de parámetros :

${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}

Expansión de subcadenas indexadas (comportamientos especiales con compensaciones negativas y, en Bashes más recientes, longitudes negativas):

${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}

Y, por supuesto, las expansiones más útiles que operan en función de si el parámetro es nulo:

${parameter:+use this if param is NOT null}
${parameter:-use this if param is null}
${parameter:=use this and assign to param if param is null}
${parameter:?show this error if param is null}

Tienen más comportamientos que los que se enumeran, y como dije, hay otras formas de manipular cadenas (una común es $ (sustitución de comandos) combinada con sed o cualquier otro filtro externo) . Pero, se encuentran tan fácilmente al escribir man bash que no creo que valga la pena extender más esta publicación.

En bash puedes probar esto:

stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.

echo ${stringZ:0:2} # prints ab

Más ejemplos en El Proyecto de Documentación de Linux

expr (1) tiene un subcomando substr:

expr substr <string> <start-index> <length>

Esto puede ser útil si no tienes bash (quizás Linux incrustado) y no quieres el extra " echo " proceso que necesita utilizar cortar (1).

${string:position:length}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top