从html页面获取文本,shell

时间:2011-02-01 21:11:47

标签: shell

我正在尝试从shell中的html页面获取文本,作为脚本的一部分向我展示我当地的温度。

但是我无法理解如何正确使用grep

摘自网页

</div><div id="yw-forecast" class="night" style="height:auto"><em>Current conditions as of 8:18 PM GMT</em><div id="yw-cond">Light Rain Shower</div><dl><dt>Feels Like:</dt><dd>6 &deg;C</dd><dt>Barometer:</dt><dd style="position:relative;">1,015.92 mb and steady</dd><dt>Humidity:</dt><dd>87 %</dd><dt>Visibility:</dt><dd>9.99 km</dd><dt>Dewpoint

除了更短的减少

<dt>Feels Like:</dt><dd>6 &deg;C</dd>

试图抓住6°C

我尝试了各种不同的策略,包括grep和awk。 shell向导可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

尝试

grep -o -e "<dd>.*deg;C</dd>" the_html.txt

从手册页:

-e PATTERN, --regexp=PATTERN
      Use PATTERN as  the  pattern.   This  can  be  used  to  specify
      multiple search patterns, or to protect a pattern beginning with
      a hyphen (-).  (-e is specified by POSIX.)

...

-o, --only-matching
      Print only the matched (non-empty) parts  of  a  matching  line,
      with each such part on a separate output line.

如果您想摆脱<dd></dd>,只需附加| cut -b 5-12

答案 1 :(得分:1)

尝试一下:

grep -Po '(?<=Feels Like:</dt><dd>).*?(?=</dd>)' | sed 's/ &deg;/°/'

结果:

6°C

答案 2 :(得分:0)

如果x是您的输入文件,并且HTML源的格式与您的写入一样,那么这应该有效 -

grep deg x | sed -e“s#^。&gt;([0-9] {1,2} \°[CF])&lt;。#\ 1#”

赛斯