Tôi sẽ đi xích nhưng một chút khác nhau. Nếu bạn có một đoạn văn bản như của bạn trong một tệp văn bản có tên là String.txt, bạn có thể làm như sau:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u
Giải trình:
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
Vì có khả năng url có thể không hoạt động, bạn có thể kiểm tra lỗi bổ sung bằng URL quan tâm của mình. ví dụ: wget -p URL -O /dev/null
nó sẽ in các mã lỗi khá khác nhau trong trường hợp URL không khả dụng, vì vậy bạn có thể thiết lập một vòng lặp để xử lý danh sách các liên kết của mình và đưa ra trạng thái hợp lệ của chúng.
Nếu cuối cùng bạn trích xuất các liên kết từ các tệp html thì có thể có một số rắc rối với sed
các trường hợp đặc biệt. Như đã được đề xuất trong một bài đăng hài hước mà bạn có thể đã thấy - tốt nhất không nên sử dụng regexps mà là một công cụ phân tích cú pháp html. Một trình phân tích cú pháp dễ dàng có sẵn như vậy là trình duyệt chỉ văn bản lynx
(có sẵn trên bất kỳ linux nào). Điều này cho phép bạn kết xuất ngay lập tức danh sách tất cả các liên kết trong một tệp và sau đó bạn chỉ cần trích xuất các url bạn muốn với grep.
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
Tuy nhiên, điều này sẽ không hoạt động trên hầu hết các tệp html bị xáo trộn hoặc đoạn văn bản có liên kết.