我有一個文字檔案 ,其中包含與我的文件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