Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

249
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda