Reemplazar barras en una URL

Reemplazar barras en una URL

Me gustaría reemplazar todas las barras diagonales de una dirección web.

Dirección de ejemplo:https://ejemplo.com/sub/folder/files/file.txt

Resultado Esperado:ejemplo.com-subcarpeta-archivos-archivo.txt

Puedo quitar el https pero parece que no puedo reemplazar las barras restantes con:

echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')

Lo anterior solo me da esto:

example.com/sub/folder/files/file.txt

Agregar un segundo sed para reemplazar las barras diagonales solo elimina la primera encontrada. ¿Qué estoy haciendo mal?

Respuesta1

prueba esto:

echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'

El resultado es: www.ejemplo.com-sub-carpeta-archivos-archivo.txt

la razón por la que solo estaba reemplazando el 'primero encontrado' es porque le faltaba g como último 'parámetro' pasado a sed, significa global y reemplazará todas las instancias encontradas con el reemplazo deseado; sin él, solo reemplazará la primera instancia encontrada.

También vale la pena señalar que puedes separar los parámetros del comando sed con cualquier símbolo, no es necesario que sea '/', prefiero usar un símbolo que no esté involucrado en la búsqueda y reemplazo, ya que te ahorrará pensar demasiado. con caracteres de fácil escape y posibles errores al reemplazar /.

Además, puede encadenar algunos comandos en sed usando la opción -e, como puede ver arriba, reemplacé 'https://' con nada (eliminándolo), luego reemplacé todo '/' con '-'. fácil fácil.

Espero que te ayude

Respuesta2

No necesitas el doble echo.

No entiendo lo que quieres decir conAgregar un segundo sed para reemplazar las barras diagonales solo elimina la primera encontrada.- solo tienes un sed comando en tu ejemplo. Puedes hacer fácilmente lo que quieras con 2 sed comandos como ese:

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

información relacionada