使用Shell抓取网页特定数据,并进行文本处理

【原始需求】

公司用户手册是SGML的源码,其中文档中存在一些SQL语句,当前想验证这些SQL是否可拷贝执行。

【对策】

使用手工拷贝验证,太慢了。

于是想抓取相关内容,然后直接使用工具进行执行,人为检查执行结果即可。

经分析,源码部分一般使用<programlisting> </programlisting>和<synopsis></synopsis>标签进行约束,于是shell要抓取的具体内容针对这两个标签来进行。

记录思路如下:

1、先处理SQL中的注释(使用--进行注释 类似于C语言的#)

2、将文本去空格进行序列处理,使用如上标签进行分割,然后取分割后的偶数位置上的值(不解释)

3、通过第二步可以得到标签中的内容,需要对标签中的特殊字符进行处理

#!/bin/bash

path='/home/ckdu/sgml_qsruan/sgml'
for file in `ls /home/qs/sgml/*.sgml`
do
    cat ${file} |sed 's/&minus;/-/g'|awk -F'--' '{print $1}'> ${file}.tmp
    cat ${file}.tmp  | awk '{printf("%s",$0)}' |awk -F "(<programlisting>)|(</programlisting>)|(<synopsis>)|(</synopsis>)" '{for(i=2;i<NF;i+=2) print $i}'|sed 's/&gt;/>/g'|sed 's/<emphasis>//g'|sed 's/<\/emphasis>//g'|sed 's/&amp;&amp;/\&/g'|sed 's/&lt;/</g'|sed 's/<replaceable>//g'|sed 's/<\/replaceable>//g' |sed 's/<\/>//g'|sed 's/<literal>//g' > ${file}.sql
done

没有排格式,偷个懒。

posted on 2018-03-13 18:34  mathore  阅读(1569)  评论(0编辑  收藏  举报