약 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
사용히델그리고xpath:
대부분의 코드를 유지하려면 다음을 수행하십시오.
dos2unix links.txt
그 다음에
while IFS= read -r url; do
xidel -e '//p[contains(., "Telephone")]/a/text()' -s "$url"
done < links.txt
더 짧게:
xargs < links.txt xidel -e '//p[contains(., "Telephone")]/a/text()' -s
산출
01522 695419
01775 723157
01522 525374
01529 460403
답변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