Shell-Script

在文件中查找主機名並將其替換為 IP 地址

  • May 12, 2018

我有一個包含大約 12300 行的巨大文件,看起來與此類似。

001.domain.com=001.somedomain.com:10001
002.domain.com=002.somedomain.com:10002
003.domain.com=003.somedomain.com:10003

我希望文件完成後看起來像這樣

001.domain.com=IP_Address_of_001.somedomain.com:10001
002.domain.com=IP_Address_of_002.somedomain.com:10002
003.domain.com=IP_Address_of_003.somedomain.com:10003

所以基本上我需要在= 符號後用IP地址查找並替換主機名。

如果有人能指出我正確的方向,我將不勝感激。

這使用 sed 提取主機名,然後使用 dig 獲取其 IP,然後再次使用 sed 進行替換。它將替換輸出到一個新文件:

$ while read line; do 
   hostname=$(echo "$line" | sed "s/.*=\(.*\):.*/\1/g")
   ip=$(dig +short $hostname | head -n1)
   echo "$line" | sed "s/\(.*=\).*\(:.*\)/\1${ip}\2/g"
done < file.txt > new_file.txt

通過使用host而不是類似的選項dig

$ cat filename.txt | while read line; do 
IP=$(host $(echo $line | cut -d'=' -f1) | grep -m1 "has address" | rev | cut -d' ' -f1 | rev)
echo $line | sed "s/\(.*=\).*\(:.*\)/\1${IP}\2/g"
done

採用主機名的解析可以替換為awk

$ cat filename.txt | while read line; do 
IP=$(host $(echo $line | cut -d= -f1) | awk -F'[ ]' '/has address/ {print $4;exit;}')
echo $line | sed "s/\(.*=\).*\(:.*\)/\1${IP}\2/g"
done

引用自:https://unix.stackexchange.com/questions/337852