一段不规则文本的截取

一段不规则文本的截取

我有一个日志文件,如下:
复制内容到剪贴板
代码:
   10/11/2007 09:22:03 FX_FILESENT       2 file(s) sent to Destination
                                dm_reportD (Session ID = 1)

   10/11/2007 09:22:19 FX_FILESENT       2 file(s) sent to Destination
                                dm_reportD (Session ID = 1)

   10/11/2007 09:22:34 FX_FILESENT       2 file(s) sent to Destination
                                dm_reportD (Session ID = 1)

** 10/11/2007 09:22:46 FM_STAGFILE       Found 1 stagnant primary billing
                                file(s): Destination 'SXC2BP', oldest stagnant
                                file polled at 'Mon Oct 01 14:53:36 2007'.

** 10/11/2007 09:22:47 FM_STAGFILE       Found 22505 stagnant primary billing
                                file(s): Destination 'dm_reportD', oldest
                                stagnant file polled at 'Mon Oct 08 08:19:09
                                2007'.

   10/11/2007 09:22:50 FX_FILESENT       2 file(s) sent to Destination
                                dm_reportD (Session ID = 1)
我需要将以**开始的那部分内容取出来,作下一步的处理,大家有什么好的办法么?      
其实我现在有实现,只是觉得效率不高,思路如下:
先找出**开始的那部分行号,然后用awk一次往下取一行,取到为空行的时候,就结束这一部分的读取.
复制内容到剪贴板
代码:
grep -n "^\*\\*" ${tmpLog} |awk -F\: '{print $1 }' >${tmpNum}

cat ${tmpNum} |while read num
do
    i=${num}
    Line=Null

    while [ "${Line}" != "" ]
    do
          Line=`awk 'NR=="'$i'"'  ${tmpLog} `
         #Debug
         #echo "Line=[$Line] and i = [$i]"
          echo "${Line}" >> ${sendFile}

          i=`expr $i + 1 `
          if [ $? -ne 0 ];then
               echo "序号计数器失败,请检查!!" >>${sendFile}
          fi
   done

done
大家帮忙想想有没有更好的办法,最好能用awk ,或sed一行命令匹配出来.

      
只用 awk 就够了:
引用:
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=1282 $?=0] ; cat file
   1
** 2
** 3
   4
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=1282 $?=0] ; awk '/^\*\*/' file | while read line; do echo "$line"; done
** 2
** 3
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=1282 $?=0] ; bye
      
呵呵,但是**下面还有一部分的,它不是一行,是不确定的几行组成的,以空行作结束符,我要获取整段      
用awk编写的:
/[0-9][0-9]\/[0-9][0-9]\/200[0-9]/{if(/^\*/)
                                     {PD=1
                                      print$0;}
                                   else
                                     PD=0
                                  }
!/[0-9][0-9]\/[0-9][0-9]\/200[0-9]/{if(PD==1) print $0}      
[root@localhost shell]# sed -n "/^\*\*/,/^$/p"  ./diay
** 10/11/2007 09:22:46 FM_STAGFILE       Found 1 stagnant primary billing
                                file(s): Destination 'SXC2BP', oldest stagnant
                                file polled at 'Mon Oct 01 14:53:36 2007'.

** 10/11/2007 09:22:47 FM_STAGFILE       Found 22505 stagnant primary billing
                                file(s): Destination 'dm_reportD', oldest
                                stagnant file polled at 'Mon Oct 08 08:19:09
                                2007'.
一条sed就可以解决了啊      

好,不错,这就是我想要的结果,哈哈      
sed和awk太强大了,不过有时候用的不熟练,可以通过其它的方式来调整一下,条条大路通罗马啦....      
好聪明的方法!ok!      
其实oracle的日志里,有很多这种不规则的信息,用sed处理一下,告警就很方便了