Extrai texto de um arquivo no Shell

1

Desejo extrair o texto entre o padrão que começa com as primeiras ocorrências de " SCRIPT: main, SIB: orvault / inap / si8 / begin, " e termina com as primeiras ocorrências " ------------------------------------------ ----------------------- "

Código que tentei

sed -n -e '/SCRIPT:main, SIB:orvault\/inap\/si8\/begin,/,/-----------------------------------------------------------------/p' trace.log > operation.log

O problema é quando o padrão de texto ocorre mais de uma vez, como no Trace.log abaixo, há duas ocorrências de " SCRIPT: main, SIB: orvault / inap / si8 / begin, " e " --------------------------------------------- -------------------- "no trace.log. O código acima busca o texto entre a ocorrência inicial do padrão "SCRIPT: m ...." até a ocorrência final do padrão "----------... ".

Como devo proceder, sugiro que a leitura do arquivo não seja uma opção.

Input Trace.log

    State[9] 1001010 , SCRIPT:main, SIB:orvault/inap/si8/begin,nParam=71
38 09:44:06......... script.cxx.1232: SIB input 
38 09:44:06......... script.cxx.1250: stopstats(conte
38 09:44:06......... script.cxx.1496: Calling SIB orv
38 09:44:06......... begin.cxx.73: TEL-
    serviceKey 10,
    calledPartyNumber -- void --,
,
    callingPartyNumber '84
,
    callingPartys'0
    iPSSPCapabilit-,
    iPAvailable -- void --,
,
    locationNumber '03
,
    extensions {
38 09:44:06......... script.cxx.785: -----------------------------------------------------------------
38 09:44:06......... begin.cxx.112: TELKOM:SINAP Forward Call Indicators copied in context.
38 09:44:06......... begin.cxx.146: TELKOM:SINAP Calling Party Number copied in context.
38 09:44:06......... begin.cxx.156: Called Party BCD Number copied in context
38 09:44:06......... begin.cxx.169: TELKOM:SINAP Calling Partys Category copied in context.
38 09:44:06......... begin.cxx.193: LOCATION NUMBER NATURE OF ADDRESS IS:   3
38 09:44:06......... begin.cxx.244: TELKOM:SINAP Location Number copied in context.
38 09:44:06......... begin.cxx.249: initial location number is 216F7480553535
38 09:44:06......... begin.cxx.263: LAI=216F7480553535
38 09:44:06......... begin.cxx.267: here1216F7480553535
38 09:44:06......... begin.cxx.283: intLAC:32853
38 09:44:06......... begin.cxx.290: intCID:13621
38 09:44:06......... begin.cxx.295: MCC=12F
38 09:44:06......... begin.cxx.296: MNC=47
38 09:44:06......... begin.cxx.297: LAC=32853
State[9] 1001010 , SCRIPT:main, SIB:orvault/inap/si8/begin,nParam=71
38 09:44:06......... script.cxx.1617: cld(context.cld) = 
38 09:44:06......... script.cxx.1617: cld_bcd(context.cld_bcd) = 1612
38 09:44:06......... script.cxx.1617: cld_bcd_nat(context.cld_bcd_nat) = 0
38 09:44:06......... script.cxx.1617: cld_bcd_plan(context.cld_bcd_plan) = 9
38 09:44:06......... script.cxx.1617: cld_inn(context.inn_cld) = 4294967295
38 09:44:06......... script.cxx.1617: cld_nat(context.nat_cld) = 4294967295
38 09:44:06......... script.cxx.1617: cld_plan(context.plan_cld) = 4294967295
38 09:44:06......... script.cxx.785: -----------------------------------------------------------------
38 09:44:06......... script.cxx.1617: cld_nat(context.nat_cld) = 23
38 09:44:06......... script.cxx.1617: cld_plan(context.plan_cld) =  56
    
por anurag roy 27.07.2018 / 14:34

1 resposta

0

Com Sed, use / q para parar após o primeiro jogo.

Esta parece ser uma duplicata desta pergunta no U & L que tem várias outras soluções também.

    
por 27.07.2018 / 14:50