为了账号安全,请及时绑定邮箱和手机立即绑定

提取两个相同定界符(多实例定界符)之间的行

提取两个相同定界符(多实例定界符)之间的行

烙印99 2021-04-06 16:25:20
我想要的是从第一次出现定界符到最后一次出现相同定界符,包括它们之间的所有内容,定界符可能在日志文件中多次出现。 sample.log[T=iaaaaaaaaa134]:SampleClass9: [T=iaaaaaaaaa134]:SampleClass7: [T=iaaaaaaaaa134]:SampleClass3: [T=iaaaaaaaaa134]:SampleClass1: [T=i8732jddcd234]:SampleClass1: [T=i8732jddcd234]:SampleClass2: [T=i8732jddcd234]:SampleClass3: [T=i8732jddcd234]:SampleClass4: Exception:NullPointerException:    sampte 1    sampte 1    sampte 1    sampte 1    sampte 1    [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: [T=i8732jddcd234]:SampleClass00: Exception:NullPointerException2:    sampte 2    sampte 2    sampte 2    sampte 2    sampte 2[T=i8732jddcd234]:SampleClass12: [T=i8732jddcd234]:SampleClass32: [T=i8732jddcd234]:SampleClass22: [T=2eeeeeeeee234]:SampleClass32: [T=2eeeeeeeee234]:SampleClass82: [T=2eeeeeeeee234]:SampleClass22: [T=2eeeeeeeee234]:SampleClass22: 例如:我想提取从第一次出现的i8732jddcd234(定界符)到最近一次出现的i8732jddcd234及其之间的所有行。可能使用awk,sed,grep linux命令。因为这是linux服务器上的日志文件。我尝试过awk /'i8732jddcd234','i8732jddcd234'/ test.log当然,这是行不通的
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

以下内容awk可能对您有所帮助。


awk '/i8732jddcd234/{if(!first){first=FNR};end=FNR} {a[FNR]=$0} END{for(i=first;i<=end;i++){print a[i]}}'  Input_file

现在也添加非单一衬里形式的解决方案。


awk '

/i8732jddcd234/ {

   if (!first) {

      first = FNR

   }

   end = FNR

}

{

   a[FNR] = $0

}

END {

  for(i = first; i <= end; i++) {

     print a[i]

  }

}'  Input_file


查看完整回答
反对 回复 2021-04-16
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

last=$(nl sample.log | tac | awk '/i8732jddcd234/ {print $1; exit}')

sed -n "/i8732jddcd234/,${last}p" sample.log

或者,用awk进行2次遍历文件:


awk -v code=i8732jddcd234 '

    NR == FNR {

        if ($0 ~ code) {

            if (!first) first=FNR

            last=FNR

        }

        next

    } 

    first <= FNR && FNR <= last

' sample.log sample.log


查看完整回答
反对 回复 2021-04-16
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

这可能对您有用(GNU sed):

sed '/i8732jddcd234/!d;:a;n;:b;//ba;$d;N;bb' file

删除所有行,直到包含的行i8732jddcd234。打印包含的行i8732jddcd234,然后检查下一行是否也行,是否重复。否则,请收集行,直到下次出现i8732jddcd234或文件结束为止,在这种情况下,可以删除累积的行。


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信