Chinaunix

标题: 多行(段落)匹配的问题,grep没有-p选项,请帮忙 [打印本页]

作者: foxhua    时间: 2008-11-26 15:19
标题: 多行(段落)匹配的问题,grep没有-p选项,请帮忙
每天需要写morning report,里面有一些无用的信息,想写个脚本处理一下,遇到一个难题,请高手帮忙。

原始信息:
comparing host1 ……
comparing host2 ……
comparing host3 ……
difference1
################
difference2
################
difference3
################
comparing host4 ……
comparing host5 ……
comparing host6 ……
difference1
################
difference2
################
difference3
################
comparing host7 ……
comparing host8 ……


我需要得到的信息:
comparing host3 ……
difference1
################
difference2
################
difference3
################
comparing host6 ……
difference1
################
difference2
################
difference3
################

如果是aix操作系统,我相信使用grep -p "comparing"应该比较容易实现
我现在是在我的pc上装了cygwin在进行处理
我试着使用 awk 'BEGIN {RS="comparing.*"} /###########/' filename
没有得到我想要的结果
请高手帮忙
作者: foxhua    时间: 2008-11-26 15:43
没人帮忙吗
作者: ly5066113    时间: 2008-11-26 15:55
标题: 回复 #1 foxhua 的帖子
awk 'BEGIN{RS="comparing"}/##/{printf RS""$0}' filename
作者: blackold    时间: 2008-11-26 16:18
标题: 回复 #1 foxhua 的帖子
grep -v "comparing"
作者: foxhua    时间: 2008-11-26 16:46
黑哥
你没看清我的需求哦,如果那么简单我是不会来求助的
^_^
作者: foxhua    时间: 2008-11-26 16:49
标题: 回复 #3 ly5066113 的帖子
我的pc不能上网
我回我工位试试的,感觉比较悬
不过先谢了
作者: blackold    时间: 2008-11-26 17:24
原帖由 foxhua 于 2008-11-26 16:46 发表
黑哥
你没看清我的需求哦,如果那么简单我是不会来求助的
^_^


Sorry! 是我的错,确实搞错了。

try:
  1. awk -v RS="(^|\n)comparing[^\n]+\ncomparing[^\n]+\n" 'NR>1' urfile
复制代码

[ 本帖最后由 blackold 于 2008-11-26 17:33 编辑 ]
作者: blackold    时间: 2008-11-26 17:41
原帖由 ly5066113 于 2008-11-26 15:55 发表
awk 'BEGIN{RS="comparing"}/##/{printf RS""$0}' filename


Good!
作者: ynchnluiti    时间: 2008-11-27 02:52
sed -r '/comp/{:a;$d;N;s/.*\n(comp)/\1/;ta}'
作者: ly5066113    时间: 2008-11-27 10:12
原帖由 ynchnluiti 于 2008-11-27 02:52 发表
sed -r '/comp/{:a;$d;N;s/.*\n(comp)/\1/;ta}'


简化简化:
sed '/comp/{$d;N;/\ncomp/D}'

^_^
作者: nuclearxin    时间: 2008-11-27 10:23
原帖由 ly5066113 于 2008-11-27 10:12 发表


简化简化:
sed '/comp/{$d;N;/\ncomp/D}'

^_^

厉害~~~~~
作者: ynchnluiti    时间: 2008-11-27 10:29
原帖由 ly5066113 于 2008-11-27 10:12 发表


简化简化:
sed '/comp/{$d;N;/\ncomp/D}'

^_^

够简化。我被转晕了
作者: foxhua    时间: 2008-11-27 12:46
看来今天我是有答案了
回工位试试的,谢谢各位了
作者: xyzlsh    时间: 2009-02-24 23:38
标题: 回复 #10 ly5066113 的帖子
能否解释一下这个语句?谢谢了。
作者: haimming    时间: 2009-02-24 23:54
标题: 回复 #10 ly5066113 的帖子
实在是高!

另ls的兄弟,要搞清D的意思就不难理解了
作者: sunbw001    时间: 2009-02-25 08:15
grep -A5 -B1 'difference1' data
作者: ywlscpl    时间: 2009-02-25 09:03
我也来一个
  1. awk '{a[NR]=$0}END{for (i=1;i<=NR;i++) if (a[i+1]!~/comparing/&&a[i+1]||a[i]~/##/) print a[i]}' file
复制代码

[ 本帖最后由 ywlscpl 于 2009-2-25 09:05 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2