Buscar y reemplazar recursivamente usando sed con URL

Buscar y reemplazar recursivamente usando sed con URL

Tengo un gran conjunto de archivos en los que necesito reemplazar un esquema de URL completo. Algunos nombres de archivos contienen espacios. Después de mucha búsqueda y análisis y errores, esto es lo más cerca que he estado:

find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +

Al archivo resultante se le ha http:eliminado el esquema, dejando el //- es decir, '//www.dominio.com'

Además, se crea un archivo NUEVO, que se agrega -eal nombre del archivo. - es decir some file.php-e, que obviamente no es deseado.

Si bien esto ciertamente sería suficiente (después de eliminar los *-earchivos, el TOC que hay en mí realmente quiere saber cómo hacerlo correctamente. Nota: estoy trabajando localmente en una Mac pero también lo haré en Linux.

¡Cualquier idea es muy apreciada!

Respuesta1

Solución 1: Una forma es usar findcon xargs:

find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'

Solución 2: Otro sería usar findcon -exec, muy similar a tu pregunta:

find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +

Ambas soluciones llamarán sedcon varios archivos como argumentos. So sedno se llama una vez para cada archivo, sino para cada conjunto de archivos.

Solución 3: En lugar de sed, también puedes usar perlpara buscar-reemplazar-trabajo:

perl -i -pe 's#http://domain.com#https://www.domain.com#g' file

Combinado con el comando find/ xargs:

find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'

información relacionada