Shell-Script

捲曲 url txt 文件,但將每個 url 與單個文件分開

  • September 1, 2018

我有一個包含很多 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"

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