看板Programming
标 题Re: [问题] 要做个自动抓基金净值功能
发信站SayYA 资讯站 (Wed Oct 6 01:10:22 2010)
转信站ptt!news.ntu!ctu-gate!ctu-peer!news.nctu!News.Math.NCTU!SayYa
※ 引述《Storm (风)》之铭言:
> ※ 引述《[email protected]》之铭言:
> > 我执行时再次遇到问题
> > D:\Program Files\GnuWin32\bin>wget -O - http://fund.cnyes.com/Detail/historicalN
> > av/B08,020.html |awk '/个别基金:start/ {print gensub(/.*"pe r">([0-9]+\.[0-9][0-
> > 9])<\/td>.*/,"\\1","") > "a.txt"}'
> > 出现这讯息
> > 档案名称、目录名称或磁碟区标签语法错误。
> 另外我刚刚测试时,发现网页的标签有一点变化,gensub() 一开头的正规表示式
> 要稍微修改一下:
> /.*"pe .">([0-9]+\.[0-9][0-9])<\/td>.*/
> ^本来是"r",但是刚刚测试发现这个 class name 会变,改成 "."
> 会比较好。
使用 wine 执行 Windows XP 的 cmd.exe 和 GNU Win32 的 wget 和 awk
进行测试後,我想我知道问题在哪了,问题出在 cmd.exe 对「'」单引号
的解释显然不是当单引号用,这就会造成一些问题,因为解析 HTML 的正
规表示式中有双引号,gensub() 函式的字串参数也有用到双引号,若要把
整个 awk 的参数改用双引号括起来的话,会让整个参数变得很丑,不过也
只好这样啦!
把 awk 的参数修改成这样试试看:
"/个别基金:start/ {print gensub(/.*pe ..>([0-9]+\.[0-9][0-9])<\/td>.*/, \"\\1\",\"g\") > \"a.txt\"}"
简单的说,要用「\」跳脱 awk 参数内用到的「"」,否则 awk 会收到不完整的
参数而发生错误。
--
※ Origin: SayYA 资讯站 <bbs.sayya.org>
◆ From: c-76-111-34-186.hsd1.ga.comcast.net