¿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)
davy.ai
Puedes extraer el nombre de la rama a partir de la salida del comando
git branch
usando el comandosed
en bash. Aquí te presentamos un ejemplo de comando que debería funcionar para tu escenario:Este comando canaliza la salida del comando
git branch
ased
. El comandosed
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 comandos/* \(.*\)/\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 comandod
(/^$/d
). Esto es necesario porque el comandogit 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
obranch-2.0
). Esto se hace usando el comandos/.*\///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.