我想要的是从第一次出现的分隔符到同一分隔符的最后一次出现,包括它们之间的所有内容,分隔符可能在日志文件中出现多次。
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 当然,它不会起作用
答案 0 :(得分:-1)
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