Ich habe eine Textdatei, modifyhostslist.txt
die Einträge enthält, die Einträgen in meiner hosts
Datei entsprechen. Nicht jeder Eintrag in meiner hosts
Datei muss geändert werden, nur Einträge, die auch in gefunden werden modifyhostslist.txt
.
Die darin enthaltenen Einträge modifyhostslist.txt
sind 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, sed
die 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 hosts
Datei 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 awk
Befehl 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.txt
mit 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 hosts
um eine Unix-Systemdatei handelt, gehe ich davon aus, dass sie die richtigen Zeilenenden hat, und wir müssen daher die überzähligen \r
Zeichen 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