免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3766 | 回复: 20
打印 上一主题 下一主题

[文本处理] 这样的文本如何提取?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-27 14:05 |只看该作者 |正序浏览
本帖最后由 oneouts 于 2012-07-27 14:19 编辑

   <td align="left"><span class="row_proxy_ip">110.139.99.207</span
   </td>
         
         
          <td align="left"><span class="row_proxy_port">proxy list - port 8080">8080</a>       </span>   </td>
         
         
         
         <td align="left"><div class="last_check" data-time="114"></div></td>     
         

          <td align="left">
         
                    
            <a title="Indonesian proxy list elite">china<span style="color:#666666; font-size:10px;"> - Pontianak</span></a>          </td>

。。。。。。。。

在这个文本中提取ip ,port,国家
就像
110.139.99.207   8080    china
.......


请问awk 的脚本如何实现啊
谢谢

论坛徽章:
0
21 [报告]
发表于 2012-07-27 16:38 |只看该作者
我这太菜了
好好学习
谢谢了

论坛徽章:
0
20 [报告]
发表于 2012-07-27 16:25 |只看该作者
回复 19# oneouts


    "[^>]是以>开头对吧

这个。。。
[^>] 表示  非>字符

论坛徽章:
0
19 [报告]
发表于 2012-07-27 16:24 |只看该作者
原来是
零宽断言
我看了
负向零宽断言
嘿嘿
谢谢了
开来
需要买本书好好学学正则了

论坛徽章:
0
18 [报告]
发表于 2012-07-27 16:14 |只看该作者
grep -oP "[^>]*(?=</span></a>)
请问这个正则是什么意思啊??
"[^>]是以>开头对吧
*是匹配任意一个字符
?是匹配一次or 0次字符在这里可以不写吗?



论坛徽章:
0
17 [报告]
发表于 2012-07-27 15:37 |只看该作者
本帖最后由 personball 于 2012-07-27 15:42 编辑

回复 16# oneouts
  1.     personball@vostro:mysql$echo 'olor:#666666; font-size:10px;"> - Bontang</span></a>'|grep -oP "(?<= - )[^<]*"
  2. Bontang
  3. personball@vostro:mysql$
复制代码
一定要用awk,肯定也可以的
只是个人觉得awk不适合这种场合

补充个另一种零宽断言
  1. personball@vostro:mysql$echo 'olor:#666666; font-size:10px;"> - Bontang</span></a>'|grep -oP "[^>]*(?=</span></a>)"
  2. - Bontang
  3. personball@vostro:mysql$
复制代码

论坛徽章:
0
16 [报告]
发表于 2012-07-27 15:27 |只看该作者
谢谢猫兄
还有个疑问
就是如何打出位于匹配文字之间的内容
olor:#666666; font-size:10px;"> - Bontang</span></a> | grep -oP "\w+(?</span></a>)

我想打出bontang
可是打出 Bontang</span></a>?
还有awk 有没有类似的功能

论坛徽章:
0
15 [报告]
发表于 2012-07-27 14:42 |只看该作者
本帖最后由 personball 于 2012-07-27 14:46 编辑

回复 12# oneouts


    不要太钻牛角尖。。。


提取国家这行,改成下面这种,严格点
  1. personball@vostro:SHELL$echo '<a title="Indonesian proxy list elite">china<span s'|grep -oP "(?<=elite\">)[^<]*"
  2. china
  3. personball@vostro:SHELL$
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-07-27 14:41 |只看该作者
回复 12# oneouts
  1. personball@vostro:SHELL$./1.sh txt
  2. 110.139.99.207 8080 china
  3. personball@vostro:SHELL$cat 1.sh
  4. #!/bin/bash
  5. ip=`grep -oP "\d+.\d+.\d+.\d+" $1`
  6. port=`grep -oP "(?<=port )\d+" $1`
  7. contry=`grep -oP "(?<=elite\">)\w+" $1`
  8. echo $ip" "$port" "$contry
  9. personball@vostro:SHELL$
复制代码

论坛徽章:
0
13 [报告]
发表于 2012-07-27 14:40 |只看该作者
如何把这些数据放在一行输出呢???
类似这样
111.111.111.111      80    china
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP