Tengo un archivo de texto, modifyhostslist.txt
que contiene entradas que corresponden a las entradas encontradas en mi hosts
archivo. No hosts
es necesario modificar todas las entradas de mi archivo, solo las entradas que también se encuentran en modifyhostslist.txt
.
Las entradas encontradas modifyhostslist.txt
deben comentarse en el hosts
archivo.
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 sed
para 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 hosts
archivo 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 hosts
archivo.
Parece que el awk
comando 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.txt
coincidan 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 hosts
es un archivo del sistema Unix, espero que tenga los finales de línea correctos y, por lo tanto, debemos eliminar los \r
caracteres 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