Sed 到 Modfiy 主机文件

Sed 到 Modfiy 主机文件

我有一个文本文件 ,其中包含与我的文件modifyhostslist.txt中找到的条目相对应的条目。hosts并非文件中的每个条目都hosts需要修改,只有在modifyhostslist.txt.

中找到的条目modifyhostslist.txt将在文件中被注释掉hosts

示例行(条目)位于modifyhostslist.txt127.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 系统文件,我希望它具有正确的行结尾,因此我们需要\rmodifyhostslist.txt 文件中删除多余的字符。这可以按如下方式完成:

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

相关内容