Substituir barras em um URL

Substituir barras em um URL

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'

informação relacionada