Shell-Script
在文件中查找主機名並將其替換為 IP 地址
我有一個包含大約 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