Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2039832
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-06-17 18:56:13

[] [] [] [] []
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 14:46 
有一个很大的文件,先通过几次grep得到特定字段的行号,如 grep -n aaa file.txt|grep bbb|grep ccc
假设得到其行号为123456789
怎么把123456789行及其上下各50行取出来呢?
谢谢



或者说,如果找符合多个条件的一行,多个条件是and的关系,除了管道还有什么方法吗?

[ 本帖最后由 nelab 于 2009-6-17 14:59 编辑 ]



您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 14:49 
回复 #1 nelab 的帖子

-C 50

LZ的命令是什么意思?



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 14:54 
我要找的一行有 aaa bbb 和 ccc
所以要用管道grep三次,
最后只剩下一行,-C没用了吧?



您对本贴的看法:
| | |
  帅哥 (Tim)
法师


CU奥运火炬传递手2008
CU编号: 465018
注册:2006-9-13
最后登录: 2009-06-17
帖子:
精华:0







来自:长春
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 14:58 
回复 #3 nelab 的帖子

GNU grep

grep -P -C50 '(?=.*aaa)(?=.*bbb)(?=.*ccc)' urfile



您对本贴的看法:

__________________________________

记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的。
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:01 
回复 #3 nelab 的帖子

写成一个就行了。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:02 


QUOTE:
原帖由 blackold 于 2009-6-17 15:01 发表
写成一个就行了。

怎么写成一个呢?



您对本贴的看法:
| | |
  帅哥
天使


CU奥运火炬传递手2008
CU编号: 627235
注册:2007-10-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:04 


QUOTE:
原帖由 ly5066113 于 2009-6-17 14:58 发表
GNU grep

grep -P -C50 '(?=.*aaa)(?=.*bbb)(?=.*ccc)' urfile

厉害啊,pfpf



您对本贴的看法:

__________________________________

锦瑟无端五十弦,一弦一柱思华年。庄生晓梦迷蝴蝶,望帝春心托杜鹃。
沧海月明珠有泪,蓝田日暖玉生烟。此情可待成追忆,只是当时已惘然。


推荐歌曲:Wings of Destiny(狂想乐队)
| | |

侠客




CU编号: 11146
注册:2002-6-23
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:39 


QUOTE:
原帖由 nelab 于 2009-6-17 15:02 发表



怎么写成一个呢?

每个grep都加上 -C50



您对本贴的看法:

__________________________________

问世间,是否此山最高。或者,另有高山比天高!
| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:51 


QUOTE:
原帖由 rockants 于 2009-6-17 15:39 发表

每个grep都加上 -C50

不行 ,这样第二个grep找出来的有可能只含有bbb,没有aaa



您对本贴的看法:
| | |

侠客




CU编号: 11146
注册:2002-6-23
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 15:59 
# cat a
aaa bbb
bbb
aaaO
aaa bbb ccc
bbb
ccc
bbb
ccc

# grep -C2 aaa a|grep -C2 bbb|grep -C2 ccc
bbb
aaaO
aaa bbb ccc
bbb
ccc



您对本贴的看法:

__________________________________

问世间,是否此山最高。或者,另有高山比天高!
[] [] [] [] []
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 16:04 
用-P(见三楼的Tim的贴子),或者写个超长的正则。

这种情况还是-P比较省事。



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
侠客




CU编号: 6988
注册:2002-4-15
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 16:05 
grep -A  or -B

-A  50      -A NUM, --after-context=NUM
-B  50      -B NUM, --before-context=NUM



您对本贴的看法:

__________________________________

无功就是过,平庸即是错!
努力,再努力
| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 16:09 
回复 #10 rockants 的帖子

nelab:~# cat test
aaa bbb
1
bbb
ccc2
aaaO
3
aaa bbb ccc
4
bbbccc
5
ccc
6
bbb
7
ccc
8
9
nelab:~# grep -C2 aaa test|grep -C2 bbb|grep -C2 ccc
1
bbb
ccc2
aaaO
3
aaa bbb ccc
4
bbbccc



您对本贴的看法:
| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 16:10 


QUOTE:
原帖由 ly5066113 于 2009-6-17 14:58 发表
GNU grep

grep -P -C50 '(?=.*aaa)(?=.*bbb)(?=.*ccc)' urfile

效果不错
牛兄能解释下这是什么意思么?



您对本贴的看法:
| | |

侠客




CU编号: 11146
注册:2002-6-23
最后登录: 2009-06-17
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 16:29 


QUOTE:
原帖由 nelab 于 2009-6-17 15:51 发表


不行 ,这样第二个grep找出来的有可能只含有bbb,没有aaa

嗯,好像是有问题。
那试试这个:
grep -C2 '.*aaa.*bbb.*ccc' a



您对本贴的看法:

__________________________________

问世间,是否此山最高。或者,另有高山比天高!
| | |
  帅哥
骑士




CU编号: 662005
注册:2008-1-11
最后登录: 2009-06-17
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-6-17 18:51 


QUOTE:
原帖由 rockants 于 2009-6-17 16:29 发表

嗯,好像是有问题。
那试试这个:
grep -C2 '.*aaa.*bbb.*ccc' a

aaa bbb ccc 的先后顺序是不确定的,你这个只能找到aaa在bbb前、bbb在ccc前的



您对本贴的看法:
| | |
阅读(1737) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~