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

相關內容