Sed zum Ändern der Hosts-Datei

Sed zum Ändern der Hosts-Datei

Ich habe eine Textdatei, modifyhostslist.txtdie Einträge enthält, die Einträgen in meiner hostsDatei entsprechen. Nicht jeder Eintrag in meiner hostsDatei muss geändert werden, nur Einträge, die auch in gefunden werden modifyhostslist.txt.

Die darin enthaltenen Einträge modifyhostslist.txtsind in der Datei auszukommentieren hosts.

Beispielzeile (Eintrag) gefunden in modifyhostslist.txt:127.0.0.1 www.domain.com

Folgendes dient als Auskommentierungssequenz:#%%#

Ich habe versucht, seddie Aufgabe mit zu erledigen, aber bisher war ich erfolglos. Hier ist mein jüngster Versuch:

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

Darüber hinaus #%%#werden die Kommentare in bestimmten Abständen entfernt, wodurch die hostsDatei in ihren ursprünglichen Zustand zurückversetzt wird. Ich vermute, dass man die Kommentare in der Datei auch entfernen kann, indem man einfach den Befehl neu anordnet, der zum Einfügen der Kommentare verwendet wird hosts?

Es sieht so aus, als ob der awkBefehl funktionieren könnte, aber ich bin mir nicht sicher, wie ich ihn verwenden soll.

Antwort1

Sie haben den Befehl verwendet:

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

Solange die Zeilen in modifyhostslist.txtmit den Zeilen in übereinstimmen /system/etc/hosts, sollte dieser Befehl wirklich funktionieren.

Wenn die Zeilen für das Auge identisch aussehen, der Befehl aber trotzdem nicht funktioniert, kann die Ursache eine Nichtübereinstimmung der (unsichtbaren) Zeilenenden sein. DOS/Windows-Dateien haben Zeilenenden mit zwei Zeichen, während Unix und Mac Zeilenenden mit einem Zeichen verwenden. Wenn dies das Problem ist, besteht die Lösung darin, die fehlerhaften Zeichen zu entfernen. Da es sich hostsum eine Unix-Systemdatei handelt, gehe ich davon aus, dass sie die richtigen Zeilenenden hat, und wir müssen daher die überzähligen \rZeichen aus der modifyhostslist.txt Datei entfernen. Dies kann wie folgt durchgeführt werden:

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

verwandte Informationen