2017-08-06 21 views
1

ページのhttps://developer.android.com/studio/index.htmlには、Linux用のAndroid SDKツールへのリンクがあります。これはスクリプトでダウンロードしたいものです。残念ながら、最新のバージョンをダウンロードするための "簡単な"リンクはありませんので、HTMLからリンクを抽出したいと思います。BashのファイルからHTMLアンカーのhrefを抽出するには?

リンクID linux-toolsによって識別され、複数の行に含まれている:

<a onclick="return onDownload(this)" id="linux-tools" data-modal-toggle="studio_tos" 
    href="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip">sdk-tools-linux-38593 

私はbashスクリプト内の変数にそのhrefを抽出したいです。私が今までに一番近かったのは以下の通りです:

grep -o -z '<a.[^<]*id="linux-tools"[^<]*</a>' index.html 

上記の2行を出力します。

一般的に使用可能なシェルコマンドを使用して実際のリンクを取得するにはどうすればよいですか?

sed -n '/id="linux-tools"/,+1 p' index.html 

あなたid="linux-tools"プラス1行を含む行からアドレスを与える:

+0

XML/HTMLパーサー(xmlstarlet、xmllint ...)を使用することをお勧めします。 – Cyrus

+0

@Cyrusはい、わかっています。私はこれを行うことができるPythonスクリプトを持っていますが、私の現在の環境は、他の言語を組み込み、追加のツールをインストールしないbashスクリプトを使用することに制限されています。 – Roxy

答えて

0

あなたの正規表現は非常に近いです。行うに残っているのは、href一部を抽出している:

grep -zoP '<a[^<]*id="linux-tools"[^<]*href="\K[^"]+' index.html 

我々は最終的に一致シーケンスに含まれるべきではなく、以前にマッチした文字の原因とPCRE(-P)とPCREの特別なエスケープシーケンス、the reset match start \Kを使用(私たちが必要二重引用符の間の部分のみ)。

0

あなたは、まずあなたがたとえば、仕事をしたい範囲を選択しsedを使用することができます。

今、あなたはちょうどその範囲からhrefを抽出するためにsed代替物を使用することができます。

sed -n '/id="linux-tools"/,+1 s/.*href="\([^"]*\).*$/\1/p' index.html 
関連する問題