Suchen und Ersetzen in der Befehlsausgabe basierend auf dem Dateiinhalt

434
o.comp

Ich habe ein tail -fKommando zum Lesen eines Protokolls, das IPs enthält. Ich möchte diese IPs jedoch durch Hostnamen ersetzen. Ich habe die dhcpd.leasesDatei für die Maschine verfügbar, auf der diese ausgeführt wird.

Ich konnte die dhcp.leasesDatei in (vielleicht?) Ein benutzerfreundlicheres Format konvertieren:

10.0.0.1 Hostname1 10.0.0.2 Hostname2 
1

1 Antwort auf die Frage

1
chaos

Angenommen, der Dateiname der Datei, die Sie beenden möchten, ist fileund der Dateiname der Liste list. Ich gehe auch davon aus, dass die Datei so listaussieht:

10.0.0.1 Hostname1 10.0.0.2 Hostname2 

Dann benutze folgendes:

tail -f file | while read l; do \ while read i h; do l="$"; done <list; echo "$l"; \ done 
  • Der tailBefehl wird an eine while-Schleife weitergeleitet, die die Eingabe Zeile für Zeile in die Variable einliest $l.
  • Innerhalb dieser while-Schleife gibt es eine weitere while-Schleife, die die Datei listZeile für Zeile liest und die Werte listin der $lVariablen ersetzt.
  • Dann wird die Zeile in stdout gedruckt.