ホストファイルを変更するにはsedを使用します

ホストファイルを変更するにはsedを使用します

テキスト ファイル があり、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余分な文字を削除する必要があります 。これは次のように実行できます。\rmodifyhostslist.txt

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

関連情報