gpt4 book ai didi

linux - awk 命令 - 检查模式并在输出中显示模式的下一行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:27 26 4
gpt4 key购买 nike

问题::

我有一个日志文件,其中包含如下信息(超过 200 个错误集)。在这里,我想在“ERROR: AddressSanitizer”行之后找到第一个 .c 文件和函数。

如果你在“ERROR:”行之后看到这里

  • 文件-asfrecohandling.c
  • 函数 - ASFPotRecoHandling_Create_RecPaxSrvcComp

回答::

awk '/ERROR: AddressSanitizer/ {L = 1} L && /\.c/ {print "file:", $5; print "function:", $4; L = 0}' file
file: ../Sources/ASFServices_Process/C/asfrecohandling.c:1431
function: ASFPotRecoHandling_Create_RecPaxSrvcComp

日志::

=================================================================
==10073==ERROR: AddressSanitizer: heap-use-after-free on address 0x7f5941fe08c0 at pc 0x7f5ed5d37de8 bp 0x7fffe6927310 sp 0x7fffe6927308
READ of size 4 at 0x7f5941fe08c0 thread T0
#0 0x7f5ed5d37de7 in ASFPotRecoHandling_Create_RecPaxSrvcComp ../Sources/ASFServices_Process/C/asfrecohandling.c:1431
#1 0x7f5ed5d2ef50 in ASFPotRecoHandling ../Sources/ASFServices_Process/C/asfrecohandling.c:399

我看到很少有日志也有 .cpp 文件。现在我想用上面的相同命令检查第一行中的 .c 或 .cpp 文件。我试过 && 和 ||同样,但没有运气

#0 0x7f5ed5d37de7 in ASFPotZXZXoHandling_KJT_RecPBVBVrvcComp ../Sources/ASFServices_Process/C/asfrecohandling.cpp:1431
#1 0x7f5ed5d2ef50 in ASFPotRecoHandling ../Sources/ASFServices_Process/C/asfrecohandling.c:399

最佳答案

基本区别在于,在一个命令中查找 cpp 和 c:

/\.c(pp)?/

问号表示“可选”,大括号表示不仅最后一个 p 是可选的,而且两者的组合也是可选的。

我可能会使用更严格的正则表达式:

/[ \t]#[0-9]+.*[A-Za-z0-9_-]+\.c(pp)?:[0-9]+/

这会获取以下冒号和行号,以及源文件名,如果我没记错的话,它必须符合标识符限制,并且以空格、井号和堆栈号开头。

awk '/ERROR: AddressSanitizer/ {L = 1} L && /[ \t]#[0-9]+.*[A-Za-z0-9_-]*\.c(pp)?:[0-9]+/ {print "file:", $5; print "function:", $4; L = 0}' asan.err 

关于linux - awk 命令 - 检查模式并在输出中显示模式的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082147/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com