Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

155
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!