Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

247
Vistas
¿Cómo devolver solo números enteros de una variable en Shell Script y descartar letras y ceros a la izquierda?

En mi shell script hay un parámetro que viene de ciertos sistemas y da una respuesta similar a esta: PAR0000008. Y necesito enviar solo el último número de este parámetro a otra variable, es decir, VAR=8. Usé el comando VAR=$( echo ${PAR} | cut -c 10 ) y funcionó perfectamente. El problema es cuando el parámetro PAR regresa con números de dos decimales como PAR0000012. Necesito descartar los ceros iniciales y enviar solo el número 12 a la variable, pero no sé cómo hacer la lógica en el Shell para descartar todos los caracteres a la izquierda del número.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Editar usando grep para manejar 0 como parte del número final

Dado que está utilizando el shell POSIX, tiene sentido utilizar una utilidad como sed o grep (o cut ). grep es un poco más flexible al analizar la cadena, lo que permite que una coincidencia REGEX maneje el trabajo. Di tu variable v=PAR0312012 y quieres el resultado r=312012 . Puede usar una sustitución de comando (por ejemplo $(...) ) para analizar el valor asignando el resultado a r , por ejemplo

 v=PAR0312012 r=$(echo $v | grep -Eo '[1-9].*$') echo $r

La expresión grep es:

  • -Eo : use REGEX extendido y solo devuelva la parte coincidente de la cadena,
  • [1-9].*$ - desde el primer carácter en [1-9] devuelve el resto de la cadena.

Esto funcionará para PAR0000012 o PAR0312012 (con resultado 312012 ).

Resultado

Para PAR0312012

 312012

Otra solución usando expr

Si su variable puede tener ceros como parte de la parte final del número, entonces debe encontrar el índice donde aparece el primer carácter [1-9] y luego asignar la subcadena que comienza en ese índice a su variable de resultado.

El shell POSIX proporciona expr , que proporciona un conjunto de herramientas de análisis de cadenas que pueden hacer esto. Los comandos necesarios son:

 expr index string charlist

y

 expr substr string start end

Donde start y end son los índices de inicio y final para extraer de la cadena. end solo tiene que ser lo suficientemente largo para abarcar toda la subcadena, por lo que puede usar la longitud total de su cadena, por ejemplo

 v=PAR0312012 ndx=$(expr index "$v" "123456789") r=$(expr substr "$v" "$ndx" 10) echo $r

Resultado

 312012

Esto manejará 0 en cualquier lugar después del primero [1-9] .

( nota: la antigua expr ... no es la forma más rápida de manejar esto, pero si solo le preocupan unas pocas decenas de miles de valores, funcionará bien. Es probable que se necesiten mil millones de números y otro método)

over 4 years ago · Santiago Trujillo Denunciar

0

Esto se puede hacer fácilmente usando Expensión de Parámetros .

 var='PAR0000008' echo "${var##*0}" //prints 8 echo "${var##*[^1-9]}" //prints 8 var="${var##*0}" echo "$var" //prints 8 var='PAR0000012' echo "${var##*0}" //prints 12 echo "${var##*[^1-9]}" //prints 12 var="${var##*[^1-9]}" echo "$var" //prints 12
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda