linux - 提取两个相同分隔符(多实例分隔符)之间的行

标签 linux awk sed

我想要的是从第一次出现的分隔符到最后一次出现同一个分隔符,包括它们之间的所有内容,分隔符可能在日志文件中出现多次。 enter image description here

样本.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

当然不行

最佳答案

遵循 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

关于linux - 提取两个相同分隔符(多实例分隔符)之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274871/

相关文章:

regex - Grep 仅在空格后的第二部分

string - 在字符串中的每个字符后添加空格

python - 读取、处理连续的二进制文件 - 高效

linux - 如何在 Linux 中获取 USB(HID 使用 ID)连接设备的使用 ID 或类似属性

linux - 如何在 Linux 中水平打印 awk 输出

awk - 文本处理 : sed to work backwards to delete until string

bash - 使用 awk 仅在分隔符后查找第一次出现的字符串

perl - 如何让 iostat 表现得像 top

linux - Shell代码-通过循环读取CSV文件并制作另一个

linux - 如何用<Leader>tt和<C-E>自动进入vim?