
約50個のURLを含むテキストファイルがあり、テキストファイルの各URLをカールして、grepを使用してGREP一致から数行を出力しようとしています。
各行をエコーすると、URLが正しく表示されるようになぜ機能しないのか理解できません。 URLとGrepを使用してCURLを手動で実行すると機能します。ただし、ループ内に入ると何も出力されません。
while IFS= read -r line
do
echo "$line"
curl -s "$line" | grep "Telephone"
done < links.txt
入力例:
https://qguild.co.uk/our-butchers/simpsons-butchers-south-hykeham/
https://qguild.co.uk/our-butchers/simpsons-butchers-spalding/
https://qguild.co.uk/our-butchers/simpsons-butchers-lincoln/
https://qguild.co.uk/our-butchers/simpsons-butchers-2/
出力例:
curl -s "https://qguild.co.uk/our-butchers/simpsons-butchers-south-hykeham/" | grep "Telephone"
<p>Simpsons Butchers,<br />Pennell`s Garden Centre,<br />Newark Road, South Hykeham, Lincoln, LN6 9NT. Telephone: 01522 695419<br />Monday - Saturday : 8am - 5.30pm Sunday : 10am - 4pm</p>
<p>Pennells Garden Centre, Newark Road, SOUTH HYKEHAM, LINCOLN LN6 9NT</p>
<p>Telephone: <a href="tel:01522-695419">01522 695419</a></p> <p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
<p>Website: <a href="http://gsimpsonbutchers.co.uk/" target="_blank" rel="noopener noreferrer">http://gsimpsonbutchers.co.uk/</a></p>
答え1
答え2
ファイルはlinks.txt
DOSまたはWindowsのテキストファイルです。
したがって、各行の末尾に追加のキャリッジリターンがあり、URL文字列の終わりを妨げます。
たとえば、を使用してURLリストをUnixテキスト形式に変換してdos2unix
から、やり直してください。
答え3
ここで入力リダイレクトとループを使用すると、while
状況が複雑すぎる可能性があります。この場合、cat
andループを使用する方がfor
簡単です。
IFS=$(printf "\n")
for line in $(cat links.txt)
do
echo "$line"
curl -s "$line" | grep "Telephone"
done