2011-02-01 3 views
1

J'essaie d'obtenir du texte à partir d'une page html en shell, dans le cadre d'un script pour me montrer la température dans ma région.Obtention de texte à partir de la page html, shell

Je ne peux cependant pas obtenir ma tête sur la façon d'utiliser grep correctement

Extrait de la page Web

</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 

Sauf plus court réduire encore

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

Essayer de saisir 6 ° C

J'ai essayé une variété de différents tactiques, y compris grep et awk. Un sorcier peut-il m'aider?

Répondre

1

Essayez

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

De la page man:

-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. 

Si vous voulez vous débarrasser de <dd> et </dd> aussi, ajoutez juste | cut -b 5-12.

+0

$ grep -o -e "

[^ <]*deg;C
" /tmp/weather.html $6 ° C –

+0

Droite. Mise à jour de la réponse pour inclure comment se débarrasser de ces dd-tags. – aioobe

+0

Merci, ce problème m'a rendu fou! –

0

Si x est votre fichier d'entrée et la source HTML est aussi régulièrement formaté comme écriture, cela devrait fonctionner -

grep ° x | sed -e "s^# > ([0-9] {1,2} \ ° [CF]) < # \ # 1."

Seth

1

pour cette solution:

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

Résultat:

6°C 
+0

Bonne idée, je pensais à des lookarounds, mais j'ai lu que ça n'était pas implémenté dans 'grep' ...' -P' fait l'affaire :-) – aioobe

Questions connexes