shell脚本检索文本的问题

wokao112358 2013-05-10 02:04:15
有一段文本如下:
[RUN]AAAAAAAAAAAA
[OK]AAAAAAAAAAA
[RUN]BBBBBBBBBBBBBBBB
[OK]BBBBBBBBBBBBB
[RUN]CCCCCCCCCCCCC
CCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
[FAILED]CCCCCCCCCCCC
[RUN]DDDDDDDDDDDDDD
[OK]DDDDDDDDDDDDDDDD

shell脚本中我只需要描红部分中间的内容,请问该怎么写?
怎么在检索到FAILED字符串时再向上检索,然后通过sed来获取内容
...全文
150 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wokao112358 2013-05-10
  • 打赏
  • 举报
回复
引用 6 楼 Mr_Ringht 的回复:
#!/bin/sh
awk 'BEGIN{flag=0;count=0}{
        if($0~/FAILED/)
        {
            flag=3
        }
        if($0~/RUN/)
        {
            flag=1
            count=0
        }
        if(flag==1)
        {
            array[count]=$0
            count+=1
        }
        if(flag==3)
        {
            array[count]=$0
            count+=1
            exit
        }
    }END{for ( i=0;i<count;i++) print array[i]}' 1.txt
[RUN]CCCCCCCCCCCCC
CCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
[FAILED]CCCCCCCCCCCC
好办法——循环,我还是脚本编程太少,多谢!
linux-c 2013-05-10
  • 打赏
  • 举报
回复
#!/bin/sh
awk 'BEGIN{flag=0;count=0}{
        if($0~/FAILED/)
        {
            flag=3
        }
        if($0~/RUN/)
        {
            flag=1
            count=0
        }
        if(flag==1)
        {
            array[count]=$0
            count+=1
        }
        if(flag==3)
        {
            array[count]=$0
            count+=1
            exit
        }
    }END{for ( i=0;i<count;i++) print array[i]}' 1.txt
[RUN]CCCCCCCCCCCCC
CCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCC
[FAILED]CCCCCCCCCCCC
wokao112358 2013-05-10
  • 打赏
  • 举报
回复
引用 3 楼 panghuhu250 的回复:
sed是流编辑器,流过去了就是过去了,没法回朔。 换一个思路:是不是你要的行开头都有空格?而要去掉的行开头都是[?这个sed容易做到。 如果上面的办法不行,建议用功能更强的工具来做,awk及其它脚本语言都很容易做到。
我举例的文本确实特性不强。。。。 文本也可能是: [RUN]AAAAAAAAAAAA AAAAAAAAAAAA//这里也可能有内容 [OK]AAAAAAAAAAA [RUN]BBBBBBBBBBBBBBBB BBBBBBBBBB [OK]BBBBBBBBBBBBB [RUN]CCCCCCCCCCCCC CCCCCCCCCCCCCC//没有空格 CCCCCCCCCCCCCCCCCC [FAILED]CCCCCCCCCCCC [RUN]DDDDDDDDDDDDDD DDDDDDDDDD [OK]DDDDDDDDDDDDDDDD 我想获取的是如下内容: [RUN]CCCCCCCCCCCCC CCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCC [FAILED]CCCCCCCCCCCC
wokao112358 2013-05-10
  • 打赏
  • 举报
回复
引用 2 楼 Mr_Ringht 的回复:
grep -v "^\[" 1.txt 
不好意思我可能没说清楚,RUN和ok之间也可能存在内容; 而我想获取的是如下内容: [RUN]CCCCCCCCCCCCC CCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCC [FAILED]CCCCCCCCCCCC
panghuhu250 2013-05-10
  • 打赏
  • 举报
回复
sed是流编辑器,流过去了就是过去了,没法回朔。 换一个思路:是不是你要的行开头都有空格?而要去掉的行开头都是[?这个sed容易做到。 如果上面的办法不行,建议用功能更强的工具来做,awk及其它脚本语言都很容易做到。
linux-c 2013-05-10
  • 打赏
  • 举报
回复
grep -v "^\[" 1.txt 
linux-c 2013-05-10
  • 打赏
  • 举报
回复
直接找不一[开头的不行吗?

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧