Grep
從 curl 響應中提取兩個字元串,將它們輸出到同一行的文件中
我想自動化一個過程。
我有一個用於 curl 請求的 IP 地址列表:
curl http://api.geoiplookup.net/?query=($ip)
從 curl 的輸出中,我想抓取城市並將一行寫入格式為
IP_address:city
.為了 grep 我發現了這個城市(Google範例):
curl http://api.geoiplookup.net/?query=216.58.198.206 | grep -oP '(?<=\<city\>).*(?=\<\/city\>)'
為了自動化我所做的過程(但需要改進^^):
for ip in $(cat essai); do curl http://api.geoiplookup.net/?query=$ip & done
當我嘗試添加
grep
命令時,它不會顯示城市並給出錯誤。非常感謝。
首先,總是引用命令行中給出的 URL。某些 URL 可能包含字元
&
,shell 會解釋它,就像您要啟動後台作業一樣。某些 URL,例如您顯示的 URL,包含文件名萬用字元,並且某些 shell 會根據它們的配置嘗試將它們與目前目錄中的文件進行匹配,如果沒有匹配,則可能會失敗並出現錯誤:$ curl http://api.geoiplookup.net/?query=216.58.198.206 zsh: no matches found: http://api.geoiplookup.net/?query=216.58.198.206
要從響應中的 XML 文件中解析出 IP 地址和城市,請使用
xmlstarlet
:$ curl -s "http://api.geoiplookup.net/?query=$ipaddr" | xmlstarlet sel -t -m '//result' -v 'concat(host, ":", city)' -nl 216.58.198.206:Mountain View
要遍歷文件中的所有 IP 地址
essai
,假設每行有一個地址:while IFS= read -r ipaddr; do curl -s "http://api.geoiplookup.net/?query=$ipaddr" | xmlstarlet sel -t -m '//result' -v 'concat(host, ":", city)' -nl done <essai