我有一个文本文件 ,其中包含与我的文件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