Substituir barras em um url

1

Gostaria de substituir todas as barras de um endereço da Web.

Exemplo de endereço: link

Resultado esperado: example.com-sub-folder-files-file.txt

Eu posso remover os https, mas parece que 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 as barras apenas remove o primeiro encontrado. O que estou fazendo errado?

    
por stargazer 01.04.2018 / 20:43

2 respostas

1

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-pasta-arquivos-arquivo.txt

o motivo de apenas substituir o 'primeiro contato' é porque você estava perdendo o g como o último 'parâmetro' passado para o sed, ele significa global e substituirá todas as instâncias encontradas com o substituto desejado, sem ele, irá 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, ele não precisa ser '/', eu prefiro usar um símbolo não envolvido na pesquisa e substituir em tudo, pois ele irá salvar Você está pensando demais em caracteres de captação de recursos e possíveis erros quando você está substituindo /.

Além disso, você pode juntar alguns comandos no sed usando a opção -e, como você pode ver acima, eu substituí 'https: //' por nada (removendo-o), então substituí todo '/' por ' - '. fácil fácil.

Espero que ajude você

    
por 01.04.2018 / 22:02
1

Você não precisa do dobro echo .

Eu não entendo o que você quer dizer com Adicionando um segundo sed para substituir barras só remove o primeiro encontrado. - você só tem um sed comando no seu exemplo. Você pode facilmente fazer o que quiser com 2 sed comandos assim:

echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'
    
por 01.04.2018 / 21:22