0

多くの行があるhtmlページがあり、その行の1つは次のとおりです。

var premium_download_link = 'http://www.someurl.com/';

htmlページ内でその行を見つけて、その行からhttp://www.someurl.comを抽出するにはどうすればよいですか?

4

5 に答える 5

3
echo "var premium_download_link = 'http://www.someurl.com/'" | awk '{print substr ($4,2,23)}'
于 2012-04-09T20:31:03.807 に答える
2

awkで:

awk -F "'" '{ for (f=1; f<=(NF-1)/2; f++) print $(f*2) }' $1

-F "'" 引用符'を特定の入力の区切り文字として定義します。

于 2012-04-09T20:26:16.243 に答える
2

使用sed

sed -n -e "s/.*var premium_download_link = '\([^']*\)';.*/\1/p"

を使用して明示的に印刷しない限り、-nフラグは印刷を抑制しpます。したがって、一致した(次に置換された)行のみが印刷されます。

編集(OPコメントに基づく):

これをシェル変数で取得するには、次のようなものが必要になる場合があります。

url=$(wget -qO - "http://originalurl.com/" | sed -n -e "s/.*var premium_download_link = '\([^']*\)';.*/\1/p")

これにより、ページがフェッチされ、実行されますsed。出力はurlである必要があり、これは。という名前の変数に格納されますurl

于 2012-04-09T20:16:31.570 に答える
2

フィールドセパレータ変数を定義することによりawk、特定のフィールド値を抽出できます。

たとえば、次のように機能するはずです-

$ echo "var premium_download_link = 'http://www.someurl.com/';" | 
awk -F"'" '{ print $2 }' 
http://www.someurl.com/

ただし、htmlファイルに他のコンテンツが含まれている場合があります。したがって、スクリプトの前に正規表現を追加して、特定の行が検出されたときにのみ実行されるようにすることができます。

例えば ​​-

awk -F"'" '/premium_download_link/{ print $2 }' 
于 2012-04-09T21:07:29.470 に答える
1
grep -Po "(?<=premium_download_link = ')[^']+"
于 2012-04-09T23:18:25.640 に答える