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í:
- Extraer 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 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}