捲曲 url txt 文件,但將每個 url 與單個文件分開
我有一個包含很多 url 的文本文件。我正在使用
curl -K "$urls" > $output
將輸出吐到我的輸出文件中。現在對於每個單獨的 url 的輸出都有一個術語,比如說“抵押貸款”,在它下面我不想要任何更多的資訊。現在我知道我可以使用
sed '/mortgage/q'
刪除術語“抵押”下方的所有資訊,但如果我在我的腳本中這樣使用它
curl -K "$urls" | sed '/mortgage/q' > $output
它會從 $urls 中第一個 url 的輸出中刪除“mortgage”的第一個實例下方的整個輸出中的所有內容,但這會擦除其他 url 的所有資訊(包括他們自己的單詞“mortgage”實例之前的內容") 因為它正在處理整個輸出,而不是每個 url。
如何指定對
sed '/mortgage/q'
url 文件中每個 url 的輸出單獨操作,使其不影響全域輸出?我的 url 文件非常簡單,格式如下(這只是一個範例):
URL = http://www.bbc.co.uk/sport/rugby-union/34914911 URL = http://stackoverflow.com/questions/9084453/simple-script-to-check-if-a-webpage-has-been-updated
等等…..
我已經設想了一種假設的方法來實現這一點,但不確定程式碼 - 有什麼方法可以調整
curl -K "$urls" | sed '/mortgage/q' > $output
命令,以便命令在$url
文件中的每個後續 url 之後循環回來,即 curl 命令最初只檢索第一個url ,sed
對該 url 材料執行命令,追加到$output
,然後循環回到文件中的第二個 url,執行 sed 命令,追加到$output
等等….這意味著每個 url 所需的材料被包含在輸出文件中,但每個 url 中“抵押”下面的東西沒有。我只是不知道如何用程式碼實現這一點。有任何想法嗎?
這應該分兩行完成:
sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf|xargs -I {} curl -O "{}" sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf|xargs -I {} basename "{}"|xargs -I {} sed '/mortgage/q' "{}"
每行的第一個 sed 命令從您的 urls 文件(範例中的 /tmp/curl.conf)中提取 URL。在第一行中,我們使用 curl 的 -O 選項將每個頁面的輸出保存到具有頁面名稱的文件中。在第二行中,我們重新檢查每個文件並僅顯示您感興趣的文本。當然,如果文件中沒有出現“抵押”一詞,則將輸出整個文件。
這將為您留下目前目錄中每個 url 的臨時文件。
編輯:
這是一個避免任何剩余文件的簡短腳本,它將結果輸出到標準輸出,您可以根據需要從那裡重定向它:
#!/bin/bash TMPF=$(mktemp) # sed command extracts URLs line by line sed -n 's/\s*URL\s*=\s*\(.*\)/\1/p' /tmp/curl.conf >$TMPF while read URL; do # retrieve each web page and delete any text after 'mortgage' (substitute whatever test you like) curl "$URL" 2>/dev/null | sed '/mortgage/q' done <"$TMPF" rm "$TMPF"