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

157
Vistas
Expresión regular para hacer coincidir la ruta en condición bash

Estoy buscando escribir una expresión regular para que coincida con las siguientes rutas.

 puts/push/1234/request puts/push/57689/request puts/push/123/request puts/push/4567/request puts/push/34/request

Tenga un nombre de variable Targetpath y cualquiera de las rutas anteriores podría ser su valor. Tengo la siguiente expresión condicional para realizar el partido.

 if [[ $Targetpath =~ puts/push/*/request ]]; then echo 1; else echo 0; fi

Pero la coincidencia no está sucediendo y siempre se obtiene 0 echod en la terminal.

Cómo se debe modificar el comando anterior para realizar la coincidencia correcta.

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

0

Intente usar la siguiente cadena de expresiones regulares, modifique la cantidad de números si es necesario

 regex="puts\/push\/[0-9]{2,}\/request" if [[ $var =~ $regex ]]; then echo 1; else echo 0; fi
over 4 years ago · Santiago Trujillo Denunciar

0

Si planea hacer coincidir cualquier texto pero / en lugar de su * , puede usar

 if [[ $Targetpath =~ puts/push/[^/]+/request ]];

Tenga en cuenta que [^/]+ es una expresión de paréntesis negada que coincide con uno o más (ya que + en POSIX ERE es uno o más cuantificadores) caracteres que no sean / char.

O, si tiene la intención de hacer coincidir los dígitos donde está su * :

 if [[ $Targetpath =~ puts/push/[0-9]+/request ]];

Aquí, [0-9]+ (o [[:digit:]]+ ) coincide con uno o más dígitos.

Aquí hay una demostración rápida :

 #!/bin/bash Targetpath='puts/push/1234/request' rx='puts/push/[0-9]+/request' if [[ "$Targetpath" =~ $rx ]]; then echo 1; else echo 0; fi # => 1

Tenga en cuenta que no necesita escapar de las barras inclinadas en este caso ya que / no son delimitadores de expresiones regulares aquí (en los comandos sed , debe escapar / si / se usa como un carácter delimitador de expresiones regulares).

En caso de que no le importe qué carácter aparece entre puts/push/ y /request , simplemente use la coincidencia global:

 if [[ "$Targetpath" == puts/push/*/request ]]; then echo 1; else echo 0; fi

Tenga en cuenta el operador == y * que coincide con cualquier texto. Sin embargo, tenga en cuenta que los patrones globales coinciden con todo el texto/cadena, por lo que es posible que también necesite * en ambos extremos.

over 4 years ago · Santiago Trujillo Denunciar

0

Como comenté, este requisito no necesita expresiones regulares. Se puede hacer completamente en glob (o extglob ):

Caso 1: si solo desea validar la parte inicial y final, use:

 [[ $Targetpath == puts/push/*/request ]]

Caso 2: si desea validar la parte inicial y final y permitir solo dígitos en la parte central:

 # enable extended glob shopt -s extglob [[ $Targetpath == puts/push/+([[:digit:]])/request ]]

Caso 3: si desea validar la parte inicial y final y permitir solo 1+ de cualquier carácter que no sea / en la parte central:

 # enable extended glob shopt -s extglob [[ $Targetpath == puts/push/+([!/])/request ]]
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