我正在運行這樣的回圈:
for i in $(cat ips_uniq.txt)
do
whois $i | grep 'netname|country|org-name' | sed ':a;N;$!ba;s/\\n//g'
done
輸出:
netname: NETPLUScountry: INcountry: INcountry: IN
netname: NETPLUScountry: INcountry: INcountry: IN
這很好,但是我的 ips_uniq.txt 包含超過 300 個 uniq IP 地址,所以理想情況下,我希望 IP 地址位于每個輸出的同一行。
uj5u.com熱心網友回復:
我的版本:
#!/bin/bash
while IFS= read -r i
do
if [[ "$i" != "" ]]
then
results=$(whois "$i" | grep -iE 'netname|country|org-name' | tr '\n' ' ')
echo "$i $results"
fi
done < ips_uniq.txt
- 使用該
while read方法是一種逐行讀取檔案的安全方法,避免了所有與空格或奇怪的行格式有關的問題。閱讀https://mywiki.wooledge.org/BashFAQ/001了解詳情。在您的情況下不是必需的,但這是一個值得學習的好結構。 - 這
if是為了避免空行。 - 然后將
whois | grep組合的結果存盤在變數中。 - 請注意,我
sed用一個簡單的替換了你,tr它洗掉了\n, 并為拆分欄位添加了一個空格。根據需要進行修改。 - 然后最后
echo將 IP 地址前綴添加到結果行。
我用 ips_uniq.txt 測驗等于
8.8.8.8
74.6.231.20
結果是
8.8.8.8 NetName: LVLT-ORG-8-8 Country: US NetName: LVLT-GOGL-8-8-8 Country: US
74.6.231.20 NetName: INKTOMI-BLK-6 Country: US
使用printf您可以更好地格式化輸出(例如,固定長度的列)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451490.html
下一篇:對多個不同檔案中的數字求和
