URL txt ファイルをカールしますが、単一のファイルから各 URL を個別に grep します。

URL txt ファイルをカールしますが、単一のファイルから各 URL を個別に grep します。

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つまり、カールコマンドが最初にファイルの最初のURL、sedそのURLデータに対してコマンドを実行し、に追加して$outputから、ファイルの2番目のURLにループバックし、sedコマンドを実行して追加する$outputなどです。各URLには次のものが必要です。出力ファイルですが、各URLの「mortgage」の下の内容は含まれません。これをコードで実装する方法がわかりません。どんなアイデアがありますか?

ベストアンサー1

これは2行で行う必要があります。

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コマンドは、urlファイル(例では/tmp/curl.conf)からURLを抽出します。最初の行では、カールの-Oオプションを使用して、各ページの出力をページ名を持つファイルに保存します。 2行目では、各ファイルを再確認し、興味のあるテキストのみを表示します。もちろん、ファイルに「mortgage」という単語が含まれていないと、ファイル全体が出力されます。

これにより、現在のディレクトリの各URLの一時ファイルが残ります。

編集する:

これは残りのファイルを防ぎ、結果をstdoutに出力し、必要に応じてそこからリダイレクトできる短いスクリプトです。

#!/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"

おすすめ記事