Câu hỏi Làm thế nào để sử dụng grep để phù hợp với tên miền?


Tôi có một danh sách các url như:

hxxp://url.com/subpage.html
hxxp://www.url2.com/index.php
hxxp://subdomain.url3.com/somepage.php
...

Làm thế nào tôi có thể sử dụng grep để chỉ phù hợp với tên miền?

Tất cả các url đều có / sau tên miền. Và có rất nhiều tlds, không chắc chắn bao nhiêu, danh sách là khá lớn.


4
2018-01-10 03:51


gốc




Các câu trả lời:


Để sử dụng regexes không tham lam với grep bạn sẽ cần phải sử dụng -P tùy chọn và -o tùy chọn kết quả đầu ra chỉ phù hợp với phần. Bạn cũng sẽ cần phải sử dụng các thuật toán để một phần của khớp không được bao gồm trong đầu ra.

grep -Po '.*?//\K.*?(?=/)'

Thí dụ:

$ echo 'hxxp://subdomain.url3.com/somepage.php' | grep -Po '.*?//\K.*?(?=/)'
subdomain.url3.com

5
2018-01-10 08:04





Có một nơi tuyệt vời để kiểm tra kỹ năng regex của bạn đây. Biểu thức sẽ trông giống như

.*?//(.*)/

Bạn sẽ cần phải lặp qua tất cả các kết quả. Trên trang mà tôi đã cung cấp cho bạn, bạn có thể đặt biểu thức này vào và một địa chỉ web và sau đó nó sẽ hiển thị cho bạn những gì phù hợp. Cũng nên nhớ rằng sau đó bạn sẽ có biến bị bắt chỉ trong một khoảng thời gian giới hạn.


0
2018-01-10 04:50



Điều đó sẽ không hiệu quả http://url.com/directory/page.html - Karl Bielefeldt


Nếu họ chỉ có một TLD sau miền thì thao tác này sẽ hoạt động (tôi giả sử bạn muốn loại trừ tên miền phụ):

[^\./]*\.[^\./]*/

Nó vẫn có dấu gạch chéo, nhưng bạn có thể sed.


0
2018-02-02 06:45