这是我的第一个问题/帖子,我对使用正则表达式非常陌生。尽管进行了大量的搜索和实验(例如,-o和-w选项),但我似乎无法完成以下工作(我不好意思发布所有失败的尝试,但看到了文章的结尾)。我试图从网站上提取一些天气细节(状态、温度和风向信息)。
我使用下面的语句将适当的信息提取到文本文件中,然后我想要grep来提取该信息。当前天气列在顶部,所以我只需要前几行(头-n 7)。您可以访问该站点(https://wttr.in/[city])并进入一个城市,以查看结果的多样性。
curl -s wttr.in/fargo \\ head -n 7>~/Download/ather.cache
以下是我所面临的问题/挑战:
上述示例的理想结果(将用于状态栏中)如下所示。
天气=“阳光”
温度=“-22-5°F”
风=“↘8英里每小时”
如能提供任何协助,将不胜感激。在此之前我很抱歉,因为我很难正确设置这个帖子的格式。
背景
实际的网站视图如下,但没有颜色编码的“太阳”棒图和"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发布于 2019-02-18 22:01:26
使用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"发布于 2019-02-18 22:05:30
指出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发行版中都可以使用)。
https://stackoverflow.com/questions/54754126
复制相似问题