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'