Chinaunix

标题: 这个匹配字符串截取段落该如何实现? [打印本页]

作者: cmlove083    时间: 2011-12-31 00:08
标题: 这个匹配字符串截取段落该如何实现?
文件内容:
Label fruit
apple
pear
orange
banana
Label tree
peach
almond
crab tree
Label cloth
terylene
cotton
Label ball
football
basketball
pingpong
tennis ball
baseball
...
现在想要根据给出的字符串,取出其对应的一段。比如,从该文件中取出 ball下面的一段内容,并以下面的形式列出:
Label ball
football
basketball
pingpong
tennis ball
baseball

因为文件可能比较大,所以请教各位,这样的取法怎么实现比较好呢?


作者: cmlove083    时间: 2011-12-31 00:09
补充一下:每个关键字字段前面都是以“Label”作为开头的。
作者: yangkyo821    时间: 2011-12-31 09:51
  1. sed -n '/Label ball/{:a;N;P;/\nLabel/!{s/.*\n//;ba}}' file
复制代码

作者: zooyo    时间: 2011-12-31 09:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: zooyo    时间: 2011-12-31 09:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: zooyo    时间: 2011-12-31 09:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: zooyo    时间: 2011-12-31 10:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: yangkyo821    时间: 2011-12-31 10:06
zooyo 发表于 2011-12-31 10:02
回复 3# yangkyo821 对比一下,用N的时候要特别注意对末尾行的处理。

谢谢指正,明白了
作者: yinyuemi    时间: 2011-12-31 10:08
回复 1# cmlove083
  1. awk -v keyword="ball" -vRS="Label " '$1~keyword{printf RT $0}'
复制代码

作者: lklkxcxc    时间: 2012-01-02 03:11
awk '/Label tree/{i=1;print;next};i{if(/Label/)exit;print}' file
中i的作用不太明白
作者: mpstat    时间: 2012-01-02 03:33
lklkxcxc 发表于 2012-01-02 03:11
awk '/Label tree/{i=1;print;next};i{if(/Label/)exit;print}' file
中i的作用不太明白


i的默认值是0.当遇到label tree的时候变成1,就可以做后面那句话了if(/Label/)exit;print


作者: ly5066113    时间: 2012-01-02 10:33
  1. sed -n '/Label ball/,/Label/{/ball/p}' urfile
复制代码





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