我想要的是从第一次出现的分隔符到最后一次出现同一个分隔符,包括它们之间的所有内容,分隔符可能在日志文件中出现多次。
样本.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/