多くの行があるhtmlページがあり、その行の1つは次のとおりです。
var premium_download_link = 'http://www.someurl.com/';
htmlページ内でその行を見つけて、その行からhttp://www.someurl.comを抽出するにはどうすればよいですか?
多くの行があるhtmlページがあり、その行の1つは次のとおりです。
var premium_download_link = 'http://www.someurl.com/';
htmlページ内でその行を見つけて、その行からhttp://www.someurl.comを抽出するにはどうすればよいですか?
echo "var premium_download_link = 'http://www.someurl.com/'" | awk '{print substr ($4,2,23)}'
awkで:
awk -F "'" '{ for (f=1; f<=(NF-1)/2; f++) print $(f*2) }' $1
-F "'"
引用符'
を特定の入力の区切り文字として定義します。
使用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
。
フィールドセパレータ変数を定義することにより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 }'
grep -Po "(?<=premium_download_link = ')[^']+"