マイファイル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ファイルには2文字の行末があり、UnixとMacは1文字の行末を使用します。これが問題であれば、問題となる文字を削除することが解決策です。 Unixシステムファイルなので、hosts
正しい行末があることを望むので、ファイル\r
からmodifyhostslist.txt
追加の文字を削除する必要があります。これは次のように実行できます。
while read line; do
sed -i 's/'"$(echo "$line" | tr -d '\r')"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt