Сайт постоянно меняется, и он будет предоставлять разный источник для разных мест и разных UA.
Когда я тестирую его, возвращаемый исходный код не содержит идентификатор "aq_usdpln#1_c5"
, но вместо этого aq_usdpln_c5
,и у него нет кавычек вокруг идентификатора.
Я думаю, что лучше сначала использовать GNU grep
, изменить regex
немного более обобщенно, затем подать на awk
:
$ wget -q -O - "https://stooq.pl/q/?s=usdpln&c=3d&t=l&a=lg&b=0" | grep -oP "span id=.?aq_usdpln(#1)?_c5.?>\K.*?(?=<)"|awk -F. '{printf "USD: %s.%s\n",$1,substr($2,1,2)}'
USD: 3.81
Регулярное выражение span id=.?aq_usdpln(#1)?_c5.?>\K.*?(?=<)
для grep:
.?
для открытой кавычки, она может существовать или нет.
(#1)?
аналогична, чтобы быть совместимой, если существует #1
.
\K
означает, что регулярное выражение будет соответствовать вещамдо него, но только возвращать вещи после него.
.*?
означает совпадать с более длинными вещами, но не с greddy.
(?=<)
означает, что совпадение должно заканчиваться до <
, но не содержать <
сама.
Также я предлагаю вам добавить UA в вашу команду wget.
Удалите \n
в части "USD: %s.%s\n"
, если вы не хотите использовать новую строку после результата.
И если вам нужно round вместо усечь , затем awk '{printf "USD: %.2f",$0}'
для awk
детали.
- Из вашего примера я вижу, что вы хотите усечь , поскольку 3.81990
округляется до 3.82
, ноВам может понадобиться эта опция тоже.
Если вам не нужна часть grep
, это тоже работает (нужен GNU awk):
wget -q -O - "https://stooq.pl/q/?s=usdpln&c=3d&t=l&a=lg&b=0" | awk -F'[.>]' '/^span id=.?aq_usdpln(#1)?_c5/{printf "USD: %s.%s\n",$2,substr($3,1,2)}' RS='<'
Или этот, который не требует GNU awk:
wget -q -O - "https://stooq.pl/q/?s=usdpln&c=3d&t=l&a=lg&b=0" | awk -F. 'sub(/^span id=.?aq_usdpln(#1)?_c5\"?>/,""){printf "USD: %s.%s\n",$1,substr($2,1,2)}' RS='<'