我从GEONAMES查询伦敦邮政编码数据:
http://www.geonames.org/postalcode-search.html?q=london&country=GB
我想转输出逼到邮编标识符(贝斯纳尔格林,伊斯灵顿等)的列表。 什么是提取只是在bash名的最好方法?
我从GEONAMES查询伦敦邮政编码数据:
http://www.geonames.org/postalcode-search.html?q=london&country=GB
我想转输出逼到邮编标识符(贝斯纳尔格林,伊斯灵顿等)的列表。 什么是提取只是在bash名的最好方法?
我不知道,如果你的意思是这样\n
分隔的列表(或一个括号和逗号分隔)
html='http://www.geonames.org/postalcode-search.html?q=london&country=GB'
wget -q "$html" -O - |
w3m -dump -T 'text/html'|
sed -nr 's/^ +[0-9]+ +(.*) +[A-Z]+[0-9]+ +United Kingdom.*/\1/p'
w3m
是:“WWW浏览的寻呼机具有优良的表/帧支持”
输出(第一行10)
London Bridge
Kilburn
Ealing
Wandsworth
Pimlico
Kensington
Leyton
Leytonstone
Plaistow
Poplar
我看到该网站提供的(但不是免费的),Web服务和XML或JSON数据......这将是最好的方式,因为HTML页面并不意味着被解析(容易)。
无论如何,没有什么是不可能的,但是严格使用bash的只有命令会被很多辛苦,如果不是不可能的; 经常其它几种常见的工具管道,以实现结果。 不过,有时候它变成更conveniente坚持,而不是合并猫像如Perl的一个单一的工具,grep的,AWK,sed和任何其他。
就像是
sed -e 's/>/>\n/g' region.html |
egrep -i "^\s*[A-Z]+[0-9]+</td>" |
sed -e 's|</td>||g'
工作中提取200行,假设代码特定的格式。
加
如果没有限制,你可以用它来分析数据的软件,那么你可以使用像线
wget -q "http://www.geonames.org/postalcode-search.html?q=london&country=GB" -O - |
sgrep '"<table class=\"restable\"" .. "</table>"' |
sed -e 's|/tr>|/tr>\n|g; s|</td>\s*<td[^>]*>|;|g; s|</th>\s*<th[^>]*>|;|g; s|<[^>]\+>||g; s|;; .*$| |g' |
grep -v "^\s*$" |
tail -n+2 | cut -d";" -f2,3
其提取的地方,并通过分隔邮政编码;
就像在一个CSV,以及AWK:
wget -q "$html" -O - |
w3m -dump -T 'text/html' |
awk '/\s*[0-9]+ / { print substr($0, 11, 16); }'
这是基于Peter.O答案,并提取相同的数据...等。 但是,在这种情况下,因为你不局限于在大多数Unix或GNU系统中发现的最小的工具,我会坚持到一个单一的普遍工具,如perl的。
如果你有机会获得mojo
从Mojolicious工程工具这一切都变得相当轻松了不少:
mojo get 'http://www.geonames.org/postalcode-search.html?q=london&country=GB' '.restable > tr > td:nth-child(2)' text | grep ^'[a-zA-Z]'
在grep
末只是为了过滤掉一些垃圾的结果; 几乎(但不完全)每隔一行是坏的,因为页面结构稍有不一致。 否则,你可能会说tr:nth-child(even)
,并得到很好的结果。