Như tôi đã nói trong nhận xét của mình, nói chung không nên phân tích HTML bằng Biểu thức chính quy, nhưng đôi khi bạn có thể thoát khỏi nó nếu HTML mà bạn đang phân tích cú pháp hoạt động tốt.
Để chỉ nhận các URL href
thuộc tính của <a>
các thành phần, tôi thấy dễ dàng nhất để làm điều đó trong nhiều giai đoạn. Từ ý kiến của bạn, có vẻ như bạn chỉ muốn tên miền cấp cao nhất chứ không phải URL đầy đủ. Trong trường hợp đó, bạn có thể sử dụng một cái gì đó như thế này:
grep -Eoi '<a [^>]+>' source.html |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
nơi source.html
chứa tệp HTML để phân tích cú pháp.
Mã này sẽ in tất cả các URL cấp cao nhất xuất hiện dưới dạng href
thuộc tính của bất kỳ <a>
thành phần nào trong mỗi dòng. Các -i
tùy chọn để là người đầu tiên grep
lệnh là để đảm bảo rằng nó sẽ làm việc trên cả hai <a>
và <A>
các yếu tố. Tôi đoán bạn cũng có thể cung cấp -i
cho người thứ 2 grep
để nắm bắt các HREF
thuộc tính chữ hoa , OTOH, tôi muốn bỏ qua HTML bị hỏng như vậy. :)
Để xử lý nội dung của http://google.com/
wget -qO- http://google.com/ |
grep -Eoi '<a [^>]+>' |
grep -Eo 'href="[^\"]+"' |
grep -Eo '(http|https)://[^/"]+'
đầu ra
http://www.google.com.au
http://maps.google.com.au
https://play.google.com
http://www.youtube.com
http://news.google.com.au
https://mail.google.com
https://drive.google.com
http://www.google.com.au
http://www.google.com.au
https://accounts.google.com
http://www.google.com.au
https://www.google.com
https://plus.google.com
http://www.google.com.au
Đầu ra của tôi hơi khác so với các ví dụ khác khi tôi được chuyển hướng đến trang Google của Úc.