从 Shell 中的文件中提取文本

从 Shell 中的文件中提取文本

我希望提取以“脚本:main,SIB:orvault/inap/si8/begin,“并以第一次出现结束”-----------------------------------------------------------------

我尝试过的代码

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

问题是当文本模式出现多次时,例如在下面的 Trace.log 中出现了两次“脚本:main,SIB:orvault/inap/si8/begin,“ 和 ”-----------------------------------------------------------------“在 trace.log 中。上面的代码获取模式开始出现之间的文本“脚本:m……”到模式的结束出现“----------……”

我应该如何进行下一步,请提出建议,因为读取文件不是一种选择。

输入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

答案1

使用 Sed,使用 /q 在第一个匹配后停止。

这似乎是一个此问题在 U&L 上重复它也有各种其他解决方案。

相关内容