免费注册 查看新帖 |

Chinaunix

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

使用sed 和awk 来过滤关键字 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-04 18:29 |只看该作者 |倒序浏览
在工作中我遇到一种情况:我需要从lsact.sh的输出中过滤出我们项目组成员提交的Activity。 但是lsact.sh的输出十分不规律,有的一行只包含一个Activity,有的一行却包含多个Activity,并且在两个Activity之间被‘,’分开。所以我做了下列命令来过滤我想要的,效率可能不高,但能达到目的,如果有人能够优化的话欢迎指教。
./lsact.sh | awk '/activity/ {print $0}' | awk -F, '{printf"%s\n%s\n%s\n%s\n%s\n%s\n",$1,$2,$3,$4,$5,$6}' | sed '/^$/ d' | sed '/activity:rebase/ d' | sed '/activity:deliver/ d' | sed '/activity:CR/ d' | sed '/activity:PR/ d' | sed 's/activity://' | sed
[email='s/@.*//']'s/@.*//'[/email]
| sort

解释:
1)awk '/activity/ {print $0}'
   打印所有包含activity字符串的行
2)awk -F, '{printf"%s\n%s\n%s\n%s\n%s\n%s\n",$1,$2,$3,$4,$5,$6}'
   以‘,’为分隔符,打印每一列。因为每一行的列数不等,所以取最大数。但这样会打印出很多空行。
3) sed '/^$/ d'
   删除第二步产生的空行
4)sed '/activity:rebase/ d';sed '/activity:deliver/ d' ;sed '/activity:CR/ d' ; sed '/activity:PR/ d'
   删除不符合要求的行
5)sed 's/activity://'
   将行中的字符串“activity:“删除
6)sed
[email='s/@.*//']'s/@.*//'[/email]

   将以
[email=‘@’]‘@’[/email]
开头的字符串删除
7)sort
   排序


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/70334/showart_1773499.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP