Chinaunix

标题: 如何提取两特定字符串间的多行字符? [打印本页]

作者: kevinadmin    时间: 2011-05-22 23:50
标题: 如何提取两特定字符串间的多行字符?
本帖最后由 kevinadmin 于 2011-05-23 22:19 编辑

请都各位朋友,我想提取两个特定字符所有行的中间多行字符,

例如,文件如下:
asdfasdf
asdf
asdfasdfasdf
AAAAAA dfasfsdfs  #有用信息,开始
AAAAAA dfasfsdfs
AAAAAA dfasfsdfs
asdfsadfsd
asdfasdf
BBBBB asdfasfsdsf
BBBBB asdfasfsdsf #有用信息,结束
asdfasdf
asdf
asdf

请问:如何提取上面红色字体间的内容? 红色字体之间的内容不固定,有多有少。

用shel或者是perl都可以 只要能实现就行。
谢谢!~~~
作者: yinyuemi    时间: 2011-05-22 23:55
回复 1# kevinadmin
  1. echo 'asdfasdf
  2. asdf
  3. asdfasdfasdf
  4. AAAAAA dfasfsdfs
  5. AAAAAA dfasfsdfs
  6. AAAAAA dfasfsdfs
  7. asdfsadfsd
  8. asdfasdf
  9. BBBBB asdfasfsdsf
  10. BBBBB asdfasfsdsf
  11. asdfasdf
  12. asdf
  13. asdf' | sed -n '/^AAAAAA/,/^BBBBB/{p;/^BBBBB/{:a;n;/^BBBBB/p;ta}}'
  14. AAAAAA dfasfsdfs
  15. AAAAAA dfasfsdfs
  16. AAAAAA dfasfsdfs
  17. asdfsadfsd
  18. asdfasdf
  19. BBBBB asdfasfsdsf
  20. BBBBB asdfasfsdsf
复制代码

作者: where27    时间: 2011-05-23 09:39
回复 2# yinyuemi

如果文本格式是这样的呢?你的写法就用不了了吧?
  1. asdfasdf
  2. asdf
  3. asdfasdfasdf
  4. AAAAAA dfasfsdfs
  5. AAAAAA dfasfsdfs
  6. AAAAAA dfasfsdfs
  7. asdfsadfsd
  8. asdfasdf
  9. BBBBB asdfasfsdsf
  10. asgasdfasdfasdf
  11. BBBBB asdfasfsdsf
  12. asdfasdf
  13. asdf
  14. asdf'
复制代码

作者: yinyuemi    时间: 2011-05-23 09:59
回复 3# where27


    不知lz的数据是不是包含这样的情况,如果是的话就不行了,再改下:
  1. sed -n '/^AAAAAA/,/^BBBBB/{p;/^BBBBB/{n;:a;$! N;/.*\nBBBBB[^\n]*$/{p;n};$b;ba}}'
复制代码

作者: nuclearxin    时间: 2011-05-23 10:16

  1. sed "/AAAAAA dfasfsdfs/,`grep -n "BBBBB asdfasfsdsf" urlfile|tail -1|cut -d: -f1`! d" urlfile
复制代码

作者: where27    时间: 2011-05-23 10:26
回复 4# yinyuemi


   
作者: nuclearxin    时间: 2011-05-23 10:37
sed 的partten space到底能N多少内容呢?
作者: where27    时间: 2011-05-23 10:38
简化一下
  1. sed -n '/^AAAAAA/{:a;N;${s/\(.*BBBBB[^\n]*\).*/\1/p};Ta}' file
复制代码

作者: where27    时间: 2011-05-23 10:40
回复 7# nuclearxin


    我觉得可以一直N,直到内存耗尽
作者: yinyuemi    时间: 2011-05-23 11:02
回复 6# where27


    啥意思
作者: where27    时间: 2011-05-23 11:08
回复 10# yinyuemi


    改的真快~~我想了好一会
作者: yinyuemi    时间: 2011-05-23 11:12
回复 11# where27


    其实,我那是不知从哪里来的小灵感
作者: sunceenjoy    时间: 2011-05-23 12:09
awk '{if($1~/^AAA/){has=2;}else if($1~/^BBBB/) {has=1;}else{if(has!=2)has=0;} if(has)print}' 1.txt
作者: kevinadmin    时间: 2011-05-23 14:00
晚上我在试一下你们的方法  谢谢!~~~
作者: kevinadmin    时间: 2011-05-23 21:54
回复 4# yinyuemi


    这个确实可以,如果我想用脚本的第一个参数 $1 来替换 AAAAAAAA 应该怎么写?

'' 让$不再具有特殊的意义,变为本身了,这个执行就有问题了。
作者: yinyuemi    时间: 2011-05-24 00:03
回复 15# kevinadmin


    sed -n "/$1/,/^BBBBB/{p;/^BBBBB/{n;:a;$! N;/.*\nBBBBB[^\n]*$/{p;n};$b;ba}}"




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