Chinaunix
标题:
这样的文本如何提取??
[打印本页]
作者:
oneouts
时间:
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 的脚本如何实现啊
谢谢
作者:
personball
时间:
2012-07-27 14:09
awk 的甲苯。。这是什么。。。
作者:
personball
时间:
2012-07-27 14:12
提取ip
grep -oP '\d+.\d+.\d+.\d+'
复制代码
作者:
oneouts
时间:
2012-07-27 14:20
这个ip 是取出来了但是端口和国家呢》?
如何把这3个选项放在一行
作者:
zooyo
时间:
2012-07-27 14:25
提示:
作者被禁止或删除 内容自动屏蔽
作者:
personball
时间:
2012-07-27 14:26
端口
grep -oP "(?<=port )\d+"
复制代码
国家感觉没啥特殊标记
作者:
personball
时间:
2012-07-27 14:27
title="Indonesian proxy list elite"
这个title会变化么?如果后面的china变了的话。。
作者:
oneouts
时间:
2012-07-27 14:28
这只是一部分而已啊。
还有好多个与上面一样的文本,手动会死人 的啊
求指教。。
把这些文本能成这样
110.139.99.207 8080 china
110.139.99.207 8080 usa
。。。。
。。
。
谢谢了
作者:
oneouts
时间:
2012-07-27 14:33
不会的
你想用RS 这选项吗
作者:
personball
时间:
2012-07-27 14:34
回复
8#
oneouts
先回答7L问题
作者:
personball
时间:
2012-07-27 14:36
回复
9#
oneouts
国家
personball@vostro:~$echo '<a title="Indonesian proxy list elite">china<span'|grep -oP "(?<=elite\">)\w+"
china
personball@vostro:~$
复制代码
作者:
oneouts
时间:
2012-07-27 14:36
这个title会变化么?如果后面的china变了的话。
不会变
其实我想用RS把这些文本先分段,然后在每个段中找数据,把他们在放一块
作者:
oneouts
时间:
2012-07-27 14:40
如何把这些数据放在一行输出呢???
类似这样
111.111.111.111 80 china
作者:
personball
时间:
2012-07-27 14:41
回复
12#
oneouts
personball@vostro:SHELL$./1.sh txt
110.139.99.207 8080 china
personball@vostro:SHELL$cat 1.sh
#!/bin/bash
ip=`grep -oP "\d+.\d+.\d+.\d+" $1`
port=`grep -oP "(?<=port )\d+" $1`
contry=`grep -oP "(?<=elite\">)\w+" $1`
echo $ip" "$port" "$contry
personball@vostro:SHELL$
复制代码
作者:
personball
时间:
2012-07-27 14:42
本帖最后由 personball 于 2012-07-27 14:46 编辑
回复
12#
oneouts
不要太钻牛角尖。。。
提取国家这行,改成下面这种,严格点
personball@vostro:SHELL$echo '<a title="Indonesian proxy list elite">china<span s'|grep -oP "(?<=elite\">)[^<]*"
china
personball@vostro:SHELL$
复制代码
作者:
oneouts
时间:
2012-07-27 15:27
谢谢猫兄
还有个疑问
就是如何打出位于匹配文字之间的内容
olor:#666666; font-size:10px;"> - Bontang</span></a> | grep -oP "\w+(?</span></a>)
我想打出bontang
可是打出 Bontang</span></a>?
还有awk 有没有类似的功能
作者:
personball
时间:
2012-07-27 15:37
本帖最后由 personball 于 2012-07-27 15:42 编辑
回复
16#
oneouts
personball@vostro:mysql$echo 'olor:#666666; font-size:10px;"> - Bontang</span></a>'|grep -oP "(?<= - )[^<]*"
Bontang
personball@vostro:mysql$
复制代码
一定要用awk,肯定也可以的
只是个人觉得awk不适合这种场合
补充个另一种零宽断言
personball@vostro:mysql$echo 'olor:#666666; font-size:10px;"> - Bontang</span></a>'|grep -oP "[^>]*(?=</span></a>)"
- Bontang
personball@vostro:mysql$
复制代码
作者:
oneouts
时间:
2012-07-27 16:14
grep -oP "[^>]*(?=</span></a>)
请问这个正则是什么意思啊??
"[^>]是以>开头对吧
*是匹配任意一个字符
?是匹配一次or 0次字符在这里可以不写吗?
作者:
oneouts
时间:
2012-07-27 16:24
原来是
零宽断言
我看了
负向零宽断言
嘿嘿
谢谢了
开来
需要买本书好好学学正则了
作者:
personball
时间:
2012-07-27 16:25
回复
19#
oneouts
"[^>]是以>开头对吧
这个。。。
[^>] 表示 非>字符
作者:
oneouts
时间:
2012-07-27 16:38
我这太菜了
好好学习
谢谢了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2