【发布时间】:2019-07-12 05:47:30
【问题描述】:
这是我的第一个问题/帖子,我对使用正则表达式非常陌生。尽管进行了大量的搜索和试验(例如,-o 和 -w 选项),但我似乎无法完成以下工作(而且我很尴尬地发布了我所有失败的尝试,但请参阅帖子的结尾) .我正在尝试从网站中提取一些天气详细信息(状态、温度和风信息)。
我正在使用以下语句将适当的信息提取到文本文件中,然后我想用 grep 提取信息。当前天气列在顶部,所以我只需要前几行(head -n 7)。您可以访问该网站 (https://wttr.in/[city]) 并输入一个 [城市] 以查看结果的多样性。
curl -s wttr.in/fargo | head -n 7 > ~/Downloads/weather.cache
以下是我面临的问题/挑战:
- 每一行都有一些“棍子”艺术,用颜色编码。这些代码与“棒”文本一起被提取到文本文件中。
- 当前天气状态可以是一个词(晴天)或多个词(部分多云)。我想要一切。
- 温度可以是单个数字 (5 °F)、范围 (0-15 °F),当然也可以是负数 (-10--5 °F)。我需要所有信息。
- 风向和风速 (↘ 8 mph)。同样,速度可以是一个范围(5-16 mph)。风向是我想捕捉的特殊/unicode 字符。
- 我想将每个项目 (#2-4) 分配给它自己的变量,而不需要从行中添加任何额外内容。
上述示例的理想结果将用于状态栏,如下所示。
天气 = “晴天”
温度 = “-22--5°F”
风 = “↘ 8 mph”
任何帮助将不胜感激。提前道歉,因为我努力正确地格式化这篇文章。
背景
实际网站视图如下,但没有“太阳”简笔画和“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
【问题讨论】:
-
我有点困惑。您是在尝试创建在后台显示的页面,还是在尝试解析在后台显示的页面?基本上,简洁地查看您尝试挖掘的一些原始文本以及您尝试生成的示例会很棒。
-
我对解析页面的一部分很感兴趣,但对于像我这样的初学者来说,这还不够“干净”。我没有做任何花哨的事情,只是试图将一些信息拉入并插入到我的 i3 状态栏中(现在回到我的待办事项列表中——现在没有什么可分享的)。我知道其他状态栏都有预建的天气模块,但我想借此机会学习一些网页抓取和文本提取方法。
标签: regex curl awk grep extract