免费注册 查看新帖 |

Chinaunix

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

[帮忙]如何搜索多个段内不同行的两个关键字? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-13 09:32 |只看该作者 |倒序浏览
比如有test.txt文本,内容如下:

test1:
mail: aaa@mymail.com
dakfjqopekjk//无关信息
.
.    //中间N行无关信息
.
lastlogintime: 1212551780
.
.    //有或者没有无关行


test2:
mail: bbb@mymail.com
dakfjqopekjk//无关信息
.
.    //中间N行无关信息
.
lastlogintime: 1212551780
.
.    //有或者没有无关行



.
.    //中间包括N段
.


testN:
mail: NNN@mymail.com
dakfjqopekjk//无关信息
.
.    //中间N行无关信息
.
lastlogintime:1212550405
.
.    //有或者没有无关行




现在我需要把mail:后面的帐号,与lastlogintime:后的时间戳整理出来,最好整理成:

aaa.mymail.com  1212551780
bbb.mymail.com  1212551780
.
.
.
NNN.mymail.com  1212550405



各位XDs有没有办法把这样多段内又不同行的整理出来呀? 救急呀.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2008-06-13 09:40 |只看该作者
awk -F: '/^mail/{printf $2}/^lastlogintime/{print $2}' test.txt

论坛徽章:
0
3 [报告]
发表于 2008-06-13 11:28 |只看该作者

回复 #2 ly5066113 的帖子

谢谢ly5066113按你这样的查找会出现一个问题,如果其中一段只有一个关键字的话,它也会找出来的..有啥方法只找出必须存在这两个关键字的?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2008-06-13 11:35 |只看该作者
原帖由 伤心孤独 于 2008-6-13 11:28 发表
谢谢ly5066113按你这样的查找会出现一个问题,如果其中一段只有一个关键字的话,它也会找出来的..有啥方法只找出必须存在这两个关键字的?


awk -F: '/^mail/{a=$2}/^lastlogintime/&&a!=""{print a,$2;a=""}' test.txt

论坛徽章:
0
5 [报告]
发表于 2008-06-13 11:37 |只看该作者

回复 #4 ly5066113 的帖子

哇,谢谢你,,.看来awk还真博大精深,要好好学习.

论坛徽章:
0
6 [报告]
发表于 2008-06-13 11:40 |只看该作者
awk -F: '/^mail/{a=$2}/^lastlogintime/&&a!=""{print a,$2;a=""}' test.txt

可以下面这样解释吗?

找到mail开头的,定义a为第二列内容,再找lastlogintime,而且a不等于空,如果达到以上条件,列印出:a,符合lastlogintime的$2,a="",最后这个a=""是不是起对a初始化的作用?

[ 本帖最后由 伤心孤独 于 2008-6-13 11:44 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2008-06-13 11:44 |只看该作者
需要GNU sed:
sed -n '/mail: */{s///;h;};/lastlogintime: */{s///;H;g;s/\n/ /;p;}'

论坛徽章:
0
8 [报告]
发表于 2008-06-13 11:46 |只看该作者
我用grep实现:

grep -e 'mail.*mymail.com\|lastLoginTime' test.txt

但是结果是分两行的,您有什么方法可以改进一下这命令吗?

[ 本帖最后由 伤心孤独 于 2008-6-13 11:47 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-06-13 11:49 |只看该作者
原帖由 woodie 于 2008-6-13 11:44 发表
需要GNU sed:
sed -n '/mail: */{s///;h;};/lastlogintime: */{s///;H;g;s/\n/ /;p;}'


我试了下,不成功呀,能稍微解释一下这个命令吗?,我解释不了.有点看不懂,呵呵.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2008-06-13 11:52 |只看该作者
原帖由 伤心孤独 于 2008-6-13 11:49 发表


我试了下,不成功呀,能稍微解释一下这个命令吗?,我解释不了.有点看不懂,呵呵.

说了需要Gsed,不是Gsed要修改下:
sed -n '/mail: */{s/mail: *//;h;};/lastlogintime: */{s/lastlogintime: *//;H;g;s/\n/ /;p;}'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP