Sed para Modfiy Hosts File

2

Eu tenho um arquivo de texto, modifyhostslist.txt , que contém entradas que correspondem às entradas encontradas no meu arquivo hosts . Nem todas as entradas no meu arquivo hosts precisam ser modificadas, apenas entradas também encontradas em modifyhostslist.txt .

As entradas encontradas em modifyhostslist.txt devem ser comentadas no arquivo hosts .

Linha de amostra (entrada) encontrada em modifyhostslist.txt : 127.0.0.1 www.domain.com

O seguinte serve como a sequência de comentários: #%%#

Eu tentei usar sed para concluir a tarefa, mas até agora não obtive êxito. Aqui está a minha mais recente facada:

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

Além disso, os comentários #%%# serão removidos em intervalos específicos, retornando assim o arquivo hosts para sua condição original. Eu suspeito que simplesmente reorganizar o comando que é usado para inserir os comentários também pode ser usado para remover os comentários no arquivo hosts ?

Parece que o comando awk pode funcionar, mas não sei como usá-lo também.

    
por user87087 08.10.2014 / 03:56

1 resposta

1

Você usou o comando:

while read line; do 
   sed -i 's/'"$line"'/#%%#'"$line"'/' /system/etc/hosts;
done < modifyhostslist.txt

Contanto que as linhas em modifyhostslist.txt correspondam às linhas em /system/etc/hosts , esse comando realmente deve funcionar.

Se as linhas parecerem idênticas ao olho, mas o comando ainda não funcionar, a causa pode ser uma incompatibilidade entre os fins de linha (invisíveis). Os arquivos DOS / Windows têm finais de linha de dois caracteres, enquanto o Unix e o Mac usam fins de linha de um caractere. Se este for o problema, a solução é remover os caracteres ofensivos. Como hosts é um arquivo de sistema Unix, espero que ele tenha as terminações de linha corretas e, portanto, precisamos remover os caracteres \r excedentes do arquivo modifyhostslist.txt . Isso pode ser feito da seguinte maneira:

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

Tags