Para substituir os caracteres entre @ e # com my/branch , use o seguinte:
$ sed -e 's!@[^@]*#!@my/branch#!' foo.txt
-e [email protected]:acme-inc/repo0.git@my/branch#egg=repo0
-e [email protected]:acme-inc/repo1.git@my/branch#egg=repo1
-e [email protected]:acme-inc/repo2.git@my/branch#egg=repo2
Observação: o [^@]* garante que você corresponda ao @ mais próximo e não ao primeiro.
Como suas necessidades exatas não são claras, suponho que você queira trocar master por my\branch .
As substituições em sed são delimitadas pelo primeiro caractere após s . Usar um caractere que não ocorra em sua string (como ! ) pode ser mais fácil de seguir.
$ sed -e 's!master!my/branch!' foo.txt
-e [email protected]:acme-inc/repo0.git@my/branch#egg=repo0
-e [email protected]:acme-inc/repo1.git@my/branch#egg=repo1
-e [email protected]:acme-inc/repo2.git@my/branch#egg=repo2
Como alternativa, você pode escapar da barra \/ para que sed não tente delimitá-la.
$ sed -e 's/master/my\/branch/' foo.txt
-e [email protected]:acme-inc/repo0.git@my/branch#egg=repo0
-e [email protected]:acme-inc/repo1.git@my/branch#egg=repo1
-e [email protected]:acme-inc/repo2.git@my/branch#egg=repo2