scripts script programacion manejo ejemplos comandos comando cadenas basicos linux string bash substr

script - programacion shell linux ejemplos



¿Qué comando linux shell devuelve una parte de una cadena? (6)

De 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 bien, si no está seguro de tener bash , considere usar cut .

Esta pregunta ya tiene una respuesta aquí:

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 ser capaz de hacer algo como esto ... substr "abcdefg" 2 3 - imprime cde .

Pregunta similar posterior:


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

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

Expansión de subcadena indexada (comportamientos especiales con compensaciones negativas y, en las más nuevas, longitud negativa):

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

Y, por supuesto, las expansiones útiles que operan sobre 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 modificables que los enumerados, y como dije, hay otras formas de manipular cadenas (una de las más comunes es $(command substitution) combinada con sed o cualquier otro filtro externo). Pero, se encuentran tan fácilmente al escribir man bash que no creo que merezca la pena ampliar esta publicación.


En bash puedes probar esto:

stringZ=abcABC123ABCabc # 0123456789..... # 0-based indexing. echo ${stringZ:0:2} # prints ab

Más ejemplos en The Linux Documentation Project


Si está buscando una utilidad de shell para hacer algo como eso, puede usar el comando de cut .

Para tomar su ejemplo, intente:

echo "abcdefg" | cut -c3-5

cuyos rendimientos

cde

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


expr(1) tiene un subcomando substr:

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

Esto puede ser útil si no tiene bash (quizás integrado en Linux) y no desea el proceso extra de "eco" que necesita para usar cut (1).


${string:position:length}