Могут быть некоторые проблемы с sed в особых случаях. Как было предложено во многих местах (например) - не использовать регулярные выражения, а механизм парсера html. Один такой легко доступный парсер содержится только в текстовом браузере lynx (доступен на любом linux). Затем вы просто извлекаете нужные URL-адреса с помощью grep.
lynx -dump -listonly myhtmlfile.html | grep IWANTthis | sort -u
Однако это не будет работать с искаженными файлами HTML (не может быть проанализировано должным образом) или текстовыми фрагментами со ссылками. Другим простым способом является цепочка. Если у вас есть текстовый фрагмент, похожий на ваш, в текстовом файле st3.txt, вы можете сделать следующее:
grep http ./st3.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 <
grep IWANTthis => will take only urls containing your text of interest
sort -u => will sort and remove duplicates from your list