首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用grep或其他方法从卷曲结果中提取子字符串和数字

如何使用grep或其他方法从卷曲结果中提取子字符串和数字
EN

Stack Overflow用户
提问于 2019-02-18 19:30:36
回答 2查看 216关注 0票数 0

这是我的第一个问题/帖子,我对使用正则表达式非常陌生。尽管进行了大量的搜索和实验(例如,-o和-w选项),但我似乎无法完成以下工作(我不好意思发布所有失败的尝试,但看到了文章的结尾)。我试图从网站上提取一些天气细节(状态、温度和风向信息)。

我使用下面的语句将适当的信息提取到文本文件中,然后我想要grep来提取该信息。当前天气列在顶部,所以我只需要前几行(头-n 7)。您可以访问该站点(https://wttr.in/[city])并进入一个城市,以查看结果的多样性。

curl -s wttr.in/fargo \\ head -n 7>~/Download/ather.cache

以下是我所面临的问题/挑战:

  1. 每一行都有一些“棍子”艺术,这是颜色编码的。这些代码与“棍子”文本一起被拖到文本文件中。
  2. 目前的天气状况可能是一个单词(Sunny)或多个单词(部分多云)。我什么都要。
  3. 温度可以是一个数字(5°F ),范围(0-15°F),当然也可以是负数(-10-5°F )。我需要所有的信息。
  4. 风向和风速(↘8英里/小时)。同样,速度可以是一个范围(5-16英里/小时)。风向是一个特殊的/unicode字符,我想捕捉它。
  5. 我希望将每个项(#2-4)赋值给它自己的变量,而不需要从行中添加任何额外的内容。

上述示例的理想结果(将用于状态栏中)如下所示。

天气=“阳光”

温度=“-22-5°F”

风=“↘8英里每小时”

如能提供任何协助,将不胜感激。在此之前我很抱歉,因为我很难正确设置这个帖子的格式。

背景

实际的网站视图如下,但没有颜色编码的“太阳”棒图和"8“(风速)。注意:颜色编码是不正确的,因为张贴软件(可能是我缺乏知识)。因此,访问原始站点(https://wwtr.in/fargo)可能会有所帮助。

代码语言:javascript
复制
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

===

一些尝试

作为一个关于温度的例子,这是我最近的例子。

代码语言:javascript
复制
egrep --regexp='-?[[:digit:]].*°F'


  .-.      -22--5 °F

失败的尝试包括(也尝试过-w选项)。

代码语言:javascript
复制
    grep -m 1 -Eo -e '-?[[:digit:]].*°F'

38;5;226m     .-.      -22--5 °F
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-18 22:01:26

使用lynx而不是curl,您就不会得到所有的格式化字符:

代码语言:javascript
复制
$ 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 ├────────

代码语言:javascript
复制
$ 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"
票数 0
EN

Stack Overflow用户

发布于 2019-02-18 22:05:30

指出API允许以其他方式下载会不会很无聊?

例如:各种短格式,如:

代码语言:javascript
复制
curl "http://wttr.in/Fargo?format=4"
curl "http://wttr.in/Fargo?format=%l:%c:%t:%w"

或html:

代码语言:javascript
复制
curl -H 'User-Agent: mozilla/compatible' http://wttr.in/Fargo

后者有助于插入逻辑标记。

另一种剥去ANSI逃逸的方法是:

代码语言:javascript
复制
curl -s http://wttr.in/Fargo | head -7 | colorize --clean-all

如果您有colorize实用程序(在各种linux发行版中都可以使用)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档