- 论坛徽章:
- 0
|
在工作中我遇到一种情况:我需要从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 |
|