ฉันจะไปผูกมัด แต่แตกต่างกันเล็กน้อย หากคุณมีตัวอย่างข้อความเหมือนของคุณในไฟล์ข้อความชื่อ strings.txt คุณสามารถทำได้ดังนี้:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u
คำอธิบาย:
grep http ./st3.txt => will catch lines with http from text file
sed 's/http/\nhttp/g' => will insert newline before each http
grep ^http => will take only lines starting with http
sed 's/\(^http[^ <]*\)\(.*\)/\1/g'
=> will preserve string from ^http until first space or < (the latter in hope if
grep IWANTthis => will take only urls containing your text of your interest; you can omit this.
sort -u => will sort the list and remove duplicates from it
เนื่องจากมีโอกาสที่ URL อาจไม่ทำงานคุณสามารถทำการตรวจสอบข้อผิดพลาดเพิ่มเติมกับ URL ที่คุณสนใจ เช่นwget -p URL -O /dev/null
- มันจะพิมพ์รหัสข้อผิดพลาดที่แตกต่างกันมากในกรณีที่ URL ไม่สามารถใช้ได้ดังนั้นคุณสามารถตั้งค่าการวนรอบเพื่อประมวลผลรายการลิงก์ของคุณและส่งออกสถานะความถูกต้องของพวกเขา
หากคุณแยกลิงก์ออกจากไฟล์ html ท้ายที่สุดอาจมีปัญหาsed
ในบางกรณี ตามที่ได้รับการแนะนำในเรื่องตลก(โพสต์)ที่คุณอาจเคยเห็นมาแล้ว - มันอาจเป็นการดีที่สุดที่จะไม่ใช้ regexps แต่เป็นเครื่องมือแยกวิเคราะห์ html ตัวแยกวิเคราะห์ที่ใช้งานง่ายอย่างหนึ่งคือเบราว์เซอร์ข้อความเท่านั้นlynx
(มีให้ใน linux ใด ๆ ) สิ่งนี้ช่วยให้คุณถ่ายโอนรายการลิงก์ทั้งหมดในไฟล์ได้ทันทีจากนั้นคุณก็แยก URL ที่คุณต้องการด้วย grep
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
อย่างไรก็ตามสิ่งนี้จะไม่ทำงานกับไฟล์ html mangled ส่วนใหญ่หรือตัวอย่างข้อความที่มีลิงก์