+ -
当前位置:首页 → 问答吧 → 如何用GREP 搜索出以下想要的结果

如何用GREP 搜索出以下想要的结果

时间:2011-07-18

来源:互联网

如文本 a.txt
-------------------------------------------------------
2011-06-26 20:00:00 a.com 铜川市 1111 24.09 36.12
-------------------------------------------------------
2011-06-26 18:00:00 a.com 鞍山市 1111 23.95 36.51
2011-06-26 19:00:00 b.com 鞍山市 2222 26.52 21.65
-------------------------------------------------------
2011-06-26 18:00:00 a.com 鞍山市 1111 26.97 28.24
2011-06-26 19:00:00 b.com 鞍山市 2222 27.12 20.32
2011-06-26 19:00:00 c.com 鞍山市 3333 27.12 20.32
-------------------------------------------------------

想搜索出的结果如下
-------------------------------------------------------
2011-06-26 18:00:00 a.com 鞍山市 1111 23.95 36.51
2011-06-26 19:00:00 b.com 鞍山市 2222 26.52 21.65
-------------------------------------------------------
2011-06-26 18:00:00 a.com 鞍山市 1111 26.97 28.24
2011-06-26 19:00:00 b.com 鞍山市 2222 27.12 20.32
2011-06-26 19:00:00 c.com 鞍山市 3333 27.12 20.32
-------------------------------------------------------

即  处于 --- 之间的行数 >=2  的内容 grep出来


请问各位SHELL大拿如何实现?

作者: ztj2247   发布时间: 2011-07-18

回复 ztj2247
  1. awk --re-interval -v RS='-{2,}' -v FS='\n' 'NR==1{printf RT}NF>3{printf $0RT}'
复制代码

作者: yinyuemi   发布时间: 2011-07-18



QUOTE:
回复  ztj2247
yinyuemi 发表于 2011-07-18 12:55




    楼上的好使 不过逻辑有些复杂 有简单一些 可以看懂的SHELL吗

作者: ztj2247   发布时间: 2011-07-18

回复 ztj2247

or:
  1. awk 'NR==1{print}
  2.    /---/{if(p>=2)print t RS $0;p=0;t=""}
  3.    NR>1&&!/---/{t=t?t RS $0:$0;p++}'
复制代码

作者: yinyuemi   发布时间: 2011-07-18

本帖最后由 ywlscpl 于 2011-07-18 13:54 编辑

awk -v RS='---+' -F '\n' 'NF>3{printf RT$0}' file

RS='---+'  已连续的-为记录分隔符
-F '\n' 已换行为域分隔符

NF>3{print RT$0},域数(NF)大于3,则打印记录分隔符及本行(RT$0)

作者: ywlscpl   发布时间: 2011-07-18



QUOTE:
如文本 a.txt
-------------------------------------------------------
2011-06-26 20:00:00 a.com 铜 ...
ztj2247 发表于 2011-07-18 12:43




awk '/---/{if(m>2)print t;t=$0;next}{m++;t=t"\n"$0}END{print}'

作者: jason680   发布时间: 2011-07-18

热门下载

更多