不完全なリンク配列の修正

不完全なリンク配列の修正

ページ上のリンクを検索するbashスクリプトを作成しています。ページからソースコードをダウンロードし、その中のリンクを見つけます。タグを付けて配列に保存します。$link。ただし、問題は、一部のリンクには完全なURLが含まれておらず、サブページまたはファイルのみが含まれることです。ページのソースコードが次のとおりです。

<h1>Julian's crappy webpage</h1>
<a href="http://one.com">Page One</a>
<a href="https://two.com">Page Two</a>
<a href="/three">Page Three</a>
<a href="four">Page Four</a>

リンクが見つかると、配列は次のようになります。

http://one.com
https://two.com
/three
four

私も変数があります$urlこれは ' のような有効な URL です。https://google.com

すべてのアイテムを作成する方法が必要です。$linkプロジェクトによって異なることをすることが効果的です。各項目について$link:

  • エントリが/で始まる場合は、次のものをマージします。$url+${リンク[n]}
  • エントリが「/」、「https://」、または「http://」で始まらない場合は、次のものを組み合わせてください。$url+"/"+${リンク[n]}

たとえば、上記の期待される応答は次のとおりです。

http://one.com
https://two.com
https://google.com/three
https://google.com/four

ベストアンサー1

これを達成するために使用できるサンプルスクリプトは次のとおりです。

#!/bin/bash

shopt -s extglob
readonly URL="https://google.com"
links=($(grep -o -P '(?<=href=").*(?=")' source.html)) # read into array

for ((i=0; i<${#links[@]}; i++))
do
  case ${links[$i]} in
    http*)
      : # do nothing
      ;;
    /*)  
      links[$i]="$URL"${links[$i]}; # update array
      ;; 
    *)
      links[$i]="$URL/"${links[$i]}; # update array
      ;;
  esac
done

source.html現在ディレクトリにあるWebページのダウンロードソースと見なされます。

おすすめ記事