免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 方兆国儿

[文本处理] 截取网址 [复制链接]

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2016-12-06 15:06 |显示全部楼层
回复 44# 方兆国儿

1. “ () [/:]
此两部分的关系,是否后者作为备选方案进行匹配?
处理此文件之初,我便思考能否同时以双FS 进行同时处理,想必是不支持双FS吧?、


不是很清楚,你说的双FS想达到什么样的效果?
如果你想把FS设成两种分割符的话,用正则的或(|)就行,比分FS='(XXX|YYY)'


2. 关于去重复的语句,你好像没有理解对


AWK去重复原理:

第一:awk的基本命令格式 awk 'pattern{action}' 省略action时,默认action是{print}

第二:pattern 条件为真时,执行 {action}。

第三:例如,!array[input]++
首先,new 一个数组,此时arrary为假
然后,给arrary赋值,此时arrary为真
最后,取反

结果,当input被赋值后,再次被读入时,arrary返回真;取反后,返回假,action不执行。



取反符的优先级高于++, 所以是先对array[input]取反,为真. 后对其赋值,记为1.


论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-06 15:19 |显示全部楼层
本帖最后由 方兆国儿 于 2016-12-06 15:48 编辑

回复 49# yinyuemi

抱歉,仁兄,该是您理解存在误差。

https://www.gnu.org/software/gawk/manual/html_node/Precedence.html
取反后为真, action将会执行,没必要继续赋值了。


论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-06 15:39 |显示全部楼层
本帖最后由 方兆国儿 于 2016-12-06 15:48 编辑

回复 49# yinyuemi

抱歉,仁兄,该是您理解存在误差。

https://www.gnu.org/software/gawk/manual/html_node/Precedence.html
取反后为真, action将会执行,没必要继续赋值了。

论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-06 15:49 |显示全部楼层
本帖最后由 方兆国儿 于 2016-12-06 15:53 编辑

回复 2# 王楠w_n

帮忙通过审核吧,谢谢。
屏幕快照 2016-12-06 下午3.53.13.png

论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-09 14:06 |显示全部楼层
回复 45# moperyblue

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt


烦请仁兄讲解一下  ((\.[^/:]*){2})/,a)
此段代码,我的理解是:匹配以点开头接着包含非 / 或 : 的字符 ,如此之匹配前2组;
所以,结合例子来说,我认为如下内容
Dec  2 10:12:26 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT js.aq.qq.com:443 HTTP/1.1"


匹配到的结果应该是:
.aq.qq

但,实际结果确是:
.qq.com
请教仁兄,这究竟是怎么回事?多谢。

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-12-09 14:25 |显示全部楼层
回复 53# 方兆国儿


你自己的脚本执行后不也是输出.qq.com吗?  这种算符合要求吗?

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-12-09 15:09 |显示全部楼层

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt

红色部分的正则会一直取到后面HTTP("/"之前)为止,  但中间最后这组.qq.com符合条件所以会被保留下来

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
发表于 2016-12-09 16:13 |显示全部楼层
grep -Po '

论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-09 16:15 |显示全部楼层
回复 55# moperyblue

您的代码没有任何问题!

就是这里不明白呀,我的理解是应该匹配 头两个点及之间字符 ,可您说的也很清楚匹配最后两个点?请问这是怎么样的过程呢?


论坛徽章:
4
15-16赛季CBA联赛之北控
日期:2016-12-06 11:11:0115-16赛季CBA联赛之广夏
日期:2016-12-06 15:04:1515-16赛季CBA联赛之四川
日期:2016-12-06 15:59:51黑曼巴
日期:2016-12-09 20:24:05
发表于 2016-12-09 16:26 |显示全部楼层
本帖最后由 方兆国儿 于 2016-12-09 16:31 编辑

回复 55# moperyblue

我试着理解您的意思
红色部分匹配到 /之后,作为取到的内容再去给 a[3] 做处理 。顺序执行匹配模式,你看我理解的对吗?
接着,a[3] 部分匹配的时候,
假设为:aa.bb.cc.com
我的理解是,得到如下结果
.bb.cc
可结果却是
cc.com
请教您,帮忙讲解一下,多谢。如果说,{2} 是匹配最后两组的话,我就理解了! 真的是这样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP