Não sei exatamente o que você quer (qual é o comando exato esperado), mas isso:
printf "%s\n" 'https://github.com/username/reponame.git' \
'[email protected]:username/reponame' | perl -lne \
'if (m#https://(.*?)/(.*/)#) {print "git remote remove $_ && git remote add $_ git\@$1:$2"}'
deve imprimir
git remote remove https://github.com/username/reponame.git && git remote add https://github.com/username/reponame.git [email protected]:username/
(Altere o print
para system
se tiver certeza de que deseja executar os comandos)
Eu mudei o for r in xyz
para inserir o URL: s no stdin do Perl, se você quiser dar a ele na linha de comando, você poderia fazer algo como
perl -le '$_=shift; if (m#http://(.*?)/(.*/)#) {print "blah $_ $1:$2"}' http://foo.bar/user/something
para remover o argumento da linha de comando para $_
(que é implicitamente usado por m//
, a menos que você especifique algo a mais com $var =~ m//
).
Além disso, melhor escapar do @
na string, já que é o sigil para uma variável de matriz.