Sed al archivo de hosts Modfiy

Sed al archivo de hosts Modfiy

Tengo un archivo de texto, modifyhostslist.txtque contiene entradas que corresponden a las entradas encontradas en mi hostsarchivo. No hostses necesario modificar todas las entradas de mi archivo, solo las entradas que también se encuentran en modifyhostslist.txt.

Las entradas encontradas modifyhostslist.txtdeben comentarse en el hostsarchivo.

Línea de muestra (entrada) encontrada en modifyhostslist.txt:127.0.0.1 www.domain.com

Lo siguiente sirve como secuencia de comentarios:#%%#

Intenté utilizar sedpara completar la tarea, pero hasta ahora no tuve éxito. Aquí está mi intento más reciente:

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

Además, los #%%#comentarios se eliminarán a intervalos específicos, devolviendo así el hostsarchivo a su condición original. Sospecho que simplemente reorganizar el comando que se usa para insertar los comentarios también se puede usar para eliminar los comentarios en el hostsarchivo.

Parece que el awkcomando podría funcionar, pero tampoco estoy seguro de cómo usarlo.

Respuesta1

Usaste el comando:

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

Siempre que las líneas de modifyhostslist.txtcoincidan con las líneas de /system/etc/hosts, ese comando realmente debería funcionar.

Si las líneas parecen idénticas a simple vista pero el comando aún no funciona, la causa podría ser una falta de coincidencia entre los finales de línea (invisibles). Los archivos DOS/Windows tienen finales de línea de dos caracteres, mientras que Unix y Mac usan finales de línea de un carácter. Si este es el problema, la solución es eliminar los personajes infractores. Dado que hostses un archivo del sistema Unix, espero que tenga los finales de línea correctos y, por lo tanto, debemos eliminar los \rcaracteres sobrantes del modifyhostslist.txt archivo. Esto puede hacerse de la siguiente manera:

while read line; do 
   sed -i 's/'"$(echo "$line" | tr -d '\r')"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

información relacionada