bash - sustituir - ¿Cómo usar SED para buscar y reemplazar cadenas de URL con el carácter "/" en las cadenas de destino?
sed reemplazar linea completa (2)
Esta pregunta ya tiene una respuesta aquí:
- Intentando escapar de a / for sed on ubuntu 4 respuestas
Estoy intentando usar SED a través de OS X Terminal para realizar un descubrimiento y reemplazo.
Imagina que tengo esta cadena llena de todo el archivo de texto: http://www.find.com/page
Y quiero reemplazarlo con esta cadena: http://www.replace.com/page
Tengo problemas porque no estoy seguro de cómo escapar o usar el carácter "/" en mis cadenas. Por ejemplo, si simplemente quería encontrar "gato" y reemplazarlo por "perro", he encontrado el siguiente comando que funciona perfectamente:
sed -i '''' ''s/cat/dog/g'' file.txt
¿Alguien tiene alguna idea sobre cómo lograr la misma funcionalidad solo en lugar de que cat y dog tengan cadenas o URL que contengan el carácter "/"? Probé muchas formas diferentes de escapar de los caracteres "/" pero parece que SED ya no puede "encontrar" la cadena y no realiza ninguna acción de búsqueda y reemplazo.
Cualquier ayuda o consejo es muy apreciado.
¡Gracias!
/
no es el delimitador en los comandos sed
, es solo uno de los posibles. Para este ejemplo, puede usar ,
por ejemplo ,
lugar ,
ya que no entra en conflicto con sus cadenas;
echo ''I think http://www.find.com/page is my favorite'' |
sed ''s,http://www.find.com/page,http://www.replace.com/page,g''
sed
puede tomar lo que sigue a la "s" como separador. Como está trabajando con URL
, es una buena práctica usar un delimitador diferente de /
para no confundir cuando finaliza su sustitución y comienza el reemplazo.
Sin embargo, una vez dicho esto, definitivamente puede usar /
si lo desea también. Solo necesitas escapar del literal /
.
Entonces, puedes hacer:
sed ''s/http:////www.find.com//page/http:////www.replace.com//page/g'' input_file
o use un delimitador diferente para evitar que su sed críptica sea más críptica.
sed ''s#http://www.find.com/page#http://www.replace.com/page#g'' input_file