这是我的第一个问题,我对使用正则表达式非常陌生。尽管进行了大量搜索和试验(例如,-o和-w选项),但我似乎无法完成以下工作(而且我很尴尬以至于无法发表所有失败的尝试,但请参见文章结尾) 。我正在尝试从网站上获取一些天气详细信息(状态,温度和风力信息)。
我正在使用以下语句将适当的信息提取到一个文本文件中,然后我希望对其进行grep提取信息。当前天气列在顶部,因此我只需要前几行(头-n 7)。您可以访问站点(https://wttr.in/[city])并输入[城市]以查看结果的多样性。
curl -s wttr.in/fargo |头-n 7>〜/ Downloads / weather.cache
以下是我遇到的问题/挑战:
以上示例的理想结果将在状态栏中使用,如下所示。
天气=“晴天”
温度=“-22--5°F”
风=“↘8 mph”
任何帮助将不胜感激。在为正确设置这篇文章的格式而努力之前,我们先表示歉意。
下面是实际的网站视图,但没有“ Sun”棒形图和“ 8”(风速)的颜色编码。注意:由于发布软件(可能是我缺乏知识),颜色编码不正确。因此,转到原始站点(https://wwtr.in/fargo)可能会有所帮助。
Weather report: Fargo, United States of America
\ / Sunny
.-. -22--5 °F
- ( ) - ↘ 8 mph
`_' 9 mi
/ \ 0.0 in
Curl result is below, which is being stored in the weather cache file I'm working with.
Weather report: Fargo, United States of America
[38;5;226m \ / [0m Sunny
[38;5;226m .-. [0m [38;5;021m-22[0m-[38;5;021m-5[0m °F[0m
[38;5;226m ― ( ) ― [0m [1m↘[0m [38;5;226m8[0m mph[0m
[38;5;226m `-’ [0m 9 mi[0m
[38;5;226m / \ [0m 0.0 in[0m
===
以温度为例,这是我最近来的。
egrep --regexp='-?[[:digit:]].*°F'
.-. -22--5 °F
失败的尝试包括(也尝试了-w选项)。
grep -m 1 -Eo -e '-?[[:digit:]].*°F'
38;5;226m .-. -22--5 °F
答案 0 :(得分:0)
使用lynx代替curl,您将不会获得所有格式的字符:
$ lynx --dump 'https://wttr.in/fargo' | head
Weather report: Fargo, United States of America
\ / Sunny
.-. -11-1 °F
― ( ) ― ↘ 8 mph
`-’ 9 mi
/ \ 0.0 in
┌─────────────┐
┌──────────────────────────────┬───────────────────────┤ Mon 18 Feb ├────────
。
$ lynx --dump 'https://wttr.in/fargo' |
awk '
BEGIN{ split("_ _ Weather Temp Wind",m) }
NR>2 && NR in m{ sub(/.* /,""); print m[NR] " = \"" $0 "\"" }
'
Weather = "Sunny"
Temp = "-11-1 °F"
Wind = "↘ 8 mph"
答案 1 :(得分:0)
指出API允许以其他方式下载是否会很无聊?
例如各种简短格式,例如:
curl "http://wttr.in/Fargo?format=4"
curl "http://wttr.in/Fargo?format=%l:%c:%t:%w"
或html:
curl -H 'User-Agent: mozilla/compatible' http://wttr.in/Fargo
后者有助于插入逻辑标记。
剥离ANSI转义的另一种方法是:
curl -s http://wttr.in/Fargo | head -7 | colorize --clean-all
如果您拥有colorize
实用程序(可用于各种linux发行版)。