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

时间:2019-02-18 19:30:37

标签: regex curl awk grep extract

这是我的第一个问题,我对使用正则表达式非常陌生。尽管进行了大量搜索和试验(例如,-o和-w选项),但我似乎无法完成以下工作(而且我很尴尬以至于无法发表所有失败的尝试,但请参见文章结尾) 。我正在尝试从网站上获取一些天气详细信息(状态,温度和风力信息)。

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

curl -s wttr.in/fargo |头-n 7>〜/ Downloads / weather.cache

以下是我遇到的问题/挑战:

  1. 每行上都有一些用彩色编码的“粘贴”插图。这些代码与“ sticks”文本一起被拉入文本文件。
  2. 当前天气状况可能是一个单词(晴天)或多个单词(部分多云)。我想要一切。
  3. 温度可以是一个整数(5°F),可以是一个范围(0-15°F),当然也可以是负数(-10--5°F)。我需要所有信息。
  4. 风向和速度(↘8 mph)。同样,速度可以是一个范围(5-16英里/小时)。风向是一个特殊的/ Unicode字符,我要捕获。
  5. 我想将每个项目(#2-4)分配给它自己的变量,而行中没有任何多余的东西。

以上示例的理想结果将在状态栏中使用,如下所示。

天气=“晴天”

温度=“-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

2 个答案:

答案 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发行版)。