テキスト ファイル があり、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