Chinaunix

标题: 如何显示出指定字符串后面的10行文本? [打印本页]

作者: xdshting    时间: 2010-01-16 22:31
标题: 如何显示出指定字符串后面的10行文本?
当然包含本行
比如

aaa  aasdf wert  ert eryt
bbb eg ry yt tuy
ccc rt uu uj tt
ddd rytyuw  uuu
eee 545uuju 4y4 6
fff thytu 65u735i
ggg wer5u 67i 67i

我想显示ccc之后的3行文本,包括ccc这一行
作者: sunbw001    时间: 2010-01-16 22:39
sed -n '/ccc/,+2p' data
作者: merlin852    时间: 2010-01-16 22:43
man grep  see -A -B -C
作者: Shell_HAT    时间: 2010-01-17 01:27

  1. grep -A 2 "ccc" urfile
复制代码

作者: jhcom    时间: 2010-01-17 03:56
shell不会用。
作者: 虎出山    时间: 2010-12-19 13:37
[root@sunxia ~]# awk '/ccc/{a=NR;b=NR+3}{if(a<=b){a++;print $0}}' 5.txt
aaa  aasdf wert  ert eryt
ccc rt uu uj tt
ddd rytyuw  uuu
eee 545uuju 4y4 6
fff thytu 65u735i
我尝试的用awk写了一下,怎么会把第一行也给显示出来了呢?基础太差,想不明白,求救高手解答
作者: yinyuemi    时间: 2010-12-19 13:56
本帖最后由 yinyuemi 于 2010-12-19 14:11 编辑

awk -v p=0 '/^ccc/{p=1;x=NR} (NR-x==4){p=0} p ' file
作者: yinyuemi    时间: 2010-12-19 14:19
本帖最后由 yinyuemi 于 2010-12-19 14:32 编辑
[root@sunxia ~]# awk '/ccc/{a=NR;b=NR+3}{if(a
虎出山 发表于 2010-12-19 13:37



    这是因为第一行数据,未匹配到/ccc/, a=0,b=0,所以“ if(a<=b)”,也是成立的, 所以第一行就打印了,而且a++命令执行后,a=1,b仍然为0,
第二行的时候,判断不成立,所以不打印,直到匹配到/ccc/,再打印。

把你改下也行,

awk '/ccc/{a=NR;b=NR+4}{a++; if(a<=b){print $0}}'

或: awk '/ccc/{a=NR;b=NR+4}{if(a<b){a++;print $0}}'
作者: xiaopan3322    时间: 2010-12-19 14:59
grep -A
作者: 虎出山    时间: 2010-12-20 13:22
这是因为第一行数据,未匹配到/ccc/, a=0,b=0,所以“ if(a
yinyuemi 发表于 2010-12-19 14:19



    谢谢圣骑士,理解了




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