Localizar e substituir na saída do comando com base no conteúdo do arquivo

1

Eu tenho um comando tail -f lendo um log contendo IPs, no entanto, desejo substituir esses IPs por nomes de host. Eu tenho o arquivo dhcpd.leases disponível para a máquina em que ele está sendo executado.

Eu consegui converter o arquivo dhcp.leases em (talvez?) um formato mais útil:

10.0.0.1 Hostname1
10.0.0.2 Hostname2
    
por o.comp 28.08.2015 / 10:42

1 resposta

1

Supondo que o nome do arquivo do arquivo que você deseja acompanhar seja file e o nome do arquivo da lista seja list . Eu também suponho que o arquivo list se parece com:

10.0.0.1 Hostname1
10.0.0.2 Hostname2

Em seguida, use isto:

tail -f file | while read l; do \
  while read i h; do l="${l//$i/$h}"; done <list; echo "$l"; \
done
  • O comando tail é canalizado para um loop while que lê a linha de entrada por linha na variável $l .
  • Dentro desse loop while, há outro loop while que lê o arquivo list linha por linha e substitui os valores de list na variável $l .
  • A linha é impressa no stdout.
por 28.08.2015 / 11:48