У меня есть текстовый файл, modifyhostslist.txt
, который содержит записи, соответствующие записям, найденным в моем hosts
файле. Не каждую запись в моем hosts
файле нужно изменять, только записи, также найденные в modifyhostslist.txt
.
Найденные записи modifyhostslist.txt
необходимо закомментировать в hosts
файле.
Пример строки (записи) найден в modifyhostslist.txt
:127.0.0.1 www.domain.com
Ниже приведена последовательность комментариев:#%%#
Я пытался использовать sed
для выполнения задачи, но пока безуспешно. Вот моя последняя попытка:
while read line; do
sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt
Кроме того, #%%#
комментарии будут удаляться через определенные интервалы, тем самым возвращая hosts
файл в исходное состояние. Я подозреваю, что простое изменение порядка команды, которая используется для вставки комментариев, также может использоваться для удаления комментариев в файле hosts
?
Кажется, эта awk
команда может работать, но я не уверен, как ее использовать.
решение1
Вы использовали команду:
while read line; do
sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt
Если строки в modifyhostslist.txt
совпадают со строками в /system/etc/hosts
, эта команда действительно должна работать.
Если строки выглядят одинаково на глаз, но команда все равно не работает, причиной может быть несоответствие между (невидимыми) окончаниями строк. Файлы DOS/Windows имеют двухсимвольные окончания строк, тогда как Unix и Mac используют односимвольные окончания строк. Если проблема в этом, решение заключается в удалении ненужных символов. Поскольку hosts
это файл системы Unix, я ожидаю, что у него правильные окончания строк, и поэтому нам нужно удалить лишние \r
символы из modifyhostslist.txt
файла. Это можно сделать следующим образом:
while read line; do
sed -i 's/'"$(echo "$line" | tr -d '\r')"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt