Gostaria de substituir todas as barras de um endereço da web.
Endereço de exemplo:https://example.com/sub/folder/files/file.txt
Resultado esperado:exemplo.com-sub-pasta-arquivos-arquivo.txt
Posso retirar o https, mas não consigo substituir as barras restantes por:
echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')
O acima só me dá isso:
example.com/sub/folder/files/file.txt
Adicionar um segundo sed para substituir barras remove apenas o primeiro encontrado. O que estou fazendo de errado?
Responder1
tente isto:
echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'
o resultado é: www.example.com-sub-folder-files-file.txt
o motivo pelo qual ele estava substituindo apenas o 'primeiro encontrado' é porque estava faltando o g como último 'parâmetro' passado para sed, significa global e substituirá todas as instâncias encontradas pela substituição desejada, sem ele, substituirá apenas a primeira instância encontrada.
Também é importante notar que você pode separar os parâmetros do comando sed com qualquer símbolo, não precisa ser '/' , prefiro usar um símbolo que não esteja envolvido na pesquisa e na substituição, pois isso evitará que você pense demais com caracteres de escape e possível bug ao substituir /.
Além disso, você pode agrupar alguns comandos no sed usando a opção -e, como você pode ver acima, substituí 'https://' por nada (removendo-o) e, em seguida, substituí todos os '/' por '-'. fácil fácil.
Espero que ajude você
Responder2
Você não precisa do dobro echo
.
Eu não entendo o que você quer dizer comAdicionar um segundo sed para substituir barras remove apenas o primeiro encontrado.- você só tem um sed
comando no seu exemplo. Você pode facilmente fazer o que quiser com 2 sed
comandos como esse:
echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'