Saya akan pergi untuk merantai tetapi sedikit berbeda. Jika Anda memiliki cuplikan teks seperti milik Anda dalam file teks bernama strings.txt, Anda dapat melakukan hal berikut:
grep http ./strings.txt | sed 's/http/\nhttp/g' | grep ^http | sed 's/\(^http[^ <]*\)\(.*\)/\1/g' | grep IWANTthis | sort -u
Penjelasan:
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
Karena ada kemungkinan url tidak berfungsi, Anda dapat melakukan pengecekan kesalahan tambahan dengan URL yang Anda minati. misalnya wget -p URL -O /dev/null
- itu akan mencetak kode kesalahan yang sangat berbeda seandainya URL tidak tersedia, sehingga Anda dapat mengatur lingkaran untuk memproses daftar tautan Anda dan menampilkan status validitasnya.
Jika Anda pada akhirnya mengekstraksi tautan dari file html maka mungkin ada beberapa masalah dengan sed
kasus khusus. Seperti yang telah disarankan dalam lucu (posting) yang mungkin sudah Anda lihat - mungkin lebih baik tidak menggunakan regexps tetapi mesin parser html. Salah satu parser yang mudah tersedia adalah browser hanya teks lynx
(tersedia di linux apa pun). Ini memungkinkan Anda untuk langsung membuang daftar semua tautan dalam sebuah file dan kemudian Anda cukup mengekstrak url yang Anda inginkan dengan grep.
lynx -dump -listonly myhtmlfile.html | grep IWANTthisString | sort -u
Namun ini tidak akan berfungsi pada sebagian besar file html yang rusak atau cuplikan teks dengan tautan.