Zincirleme için gitmek istiyorum ama biraz farklı. Strings.txt adlı bir metin dosyasında sizinki gibi bir metin snippet'iniz varsa, aşağıdakileri yapabilirsiniz:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u
Açıklama:
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'nin çalışmayabilme şansı olduğundan, ilgi URL'nizle ek hata kontrolü yapabilirsiniz. ör wget -p URL -O /dev/null
. URL'nin kullanılabilir olmaması durumunda oldukça farklı hata kodları yazdıracağından, bağlantı listenizi işlemek ve geçerlilik durumlarını çıkarmak için bir döngü oluşturabilirsiniz.
Nihayetinde html dosyalarından bağlantıları ayıklarsanız sed
, özel durumlarda bazı sorunlar olabilir . Muhtemelen daha önce gördüğünüz komik bir (post) önerildiği gibi - regexps değil bir html ayrıştırıcı motoru kullanmak en iyisi olabilir. Bu tür kolay erişilebilen ayrıştırıcılardan biri yalnızca metin tarayıcısıdır lynx
(herhangi bir Linux'ta kullanılabilir). Bu, bir dosyadaki tüm bağlantıların listesini anında dökmenizi sağlar ve daha sonra grep ile istediğiniz URL'leri çıkarırsınız.
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
Ancak bu, çoğu karışık html dosyasında veya bağlantı içeren metin parçacıklarında çalışmaz.