Eu faria assim:
sed -E 's|(.*/)([^/]*)(/\?\$.*)/{,1}|()$1|' infile
O segundo grupo captura a string / padrão que tem que ser colocada em (...)
, o terceiro grupo captura tudo o que segue até a mesma string (backreferenced com no LHS) que pode ter uma barra final. Então, basicamente, isso substitui
{0 or 1 slash}
por ()$1
.
Se o seu sed
não suportar regex estendido por meio de -E
:
sed 's|\(.*/\)\([^/]*\)\(/?\$.*\)/\{,1\}|()$1|' infile