es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo extraer el nombre de una rama utilizando regex y sed?

¿Cómo puedo extraer el nombre de la rama de una cadena utilizando bash? Por ejemplo, tengo el siguiente comando:

branch=$(git branch -a --contains $sha)

Esto puede devolver:

1) * branch-1.0 (el prefijo es siempre un asterisco)

2) branch-2.0 remotes/origin/branch-2.0 (aquí puede haber una nueva línea en lugar de un espacio)

3) master remotes/origin/master (aquí puede haber una nueva línea en lugar de un espacio)

Y solo necesito el nombre de la rama (y solo una vez) – master, branch-2.0 o branch-1.0. Sé que se puede hacer con el comando sed, pero no puedo entender cómo hacerlo.

Uso la siguiente regex: (branch-[0-9].[0-9])|(master)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puedes extraer el nombre de la rama a partir de la salida del comando git branch usando el comando sed en bash. Aquí te presentamos un ejemplo de comando que debería funcionar para tu escenario:

    branch=$(git branch -a --contains $sha | sed -n 's/* \(.*\)/\1/p; /^$/d; s/.*\///p')
    

    Este comando canaliza la salida del comando git branch a sed. El comando sed primero busca una línea que comience con un asterisco (*) y captura todo lo que hay después de éste como el nombre de la rama. Esto se hace usando el comando s/* \(.*\)/\1/p, que reemplaza toda la cadena con solo el grupo capturado (es decir, el nombre de la rama) y lo imprime (p bandera).

    Luego, sed elimina cualquier línea en blanco usando el comando d (/^$/d). Esto es necesario porque el comando git branch puede imprimir una línea en blanco después del nombre de la rama.

    Por último, sed elimina cualquier carácter antes de la última barra diagonal / en cualquier línea restante (es decir, nombres de rama remota), dejando solo el nombre de la rama (por ejemplo, master o branch-2.0). Esto se hace usando el comando s/.*\///p, que coincide con cualquier carácter (.*) hasta la última barra diagonal (\/) y los reemplaza por nada (\/) antes de imprimir el nombre de la rama.

    El resultado es que la variable branch se establecerá como el nombre de la rama extraída.

Comments are closed.