我有一个带调用堆栈的日志文件。我不想打印调用堆栈,但希望打印所有其他调用堆栈。 调用堆栈由空行分隔
我怎么能用grep / sed / awk做到这一点? 示例文件:
func1
func2
func3
func4
func5
func6
func7
func8
func9
我希望除callstack块之外的所有行都包含func4,func5。
期望的输出:
func1
func2
func3
func6
func7
func8
func9
我知道我想忽略的调用堆栈中最后一个函数的名称。因为我知道func5 谢谢你的帮助
答案 0 :(得分:1)
使用awk,您可以尝试使用
形式的内容awk '/func4/ {x=1} !x{print} x&&/^\s*$/{x=0}' < logfile
这里的技巧是使用变量x来决定是否应该打印当前行。
如果我们只知道我们不想打印的块的最后一个函数(比如func5),我们可以在处理之前和处理之后反转输入:
tac logfile | awk '/func5/ {x=1} !x{print} x&&/^\s*$/{x=0}' | tac
答案 1 :(得分:0)
你的问题很多,但如果我理解你的话,听起来你想要一个反向的grep,grep -v
。运行连续的管道,每个不需要的功能一个管道应该可以做到这一点:
cat logfile.log | grep -v func4 | grep -v func5