iOS越狱环境下含DEBUG:的单多行日志匹配提取需求
解决越狱iOS环境下DEBUG日志的单行/多行匹配问题
既然你在越狱iOS环境里工具有限,之前用grep DEBUG:只能处理单行日志,多行场景下会丢失后续内容,我推荐用awk来搞定这个需求——它在处理多行文本逻辑上比grep灵活得多,而且越狱环境基本都能找到它。
核心解决方案(awk命令)
直接用这个命令处理你的日志文件:
awk '/DEBUG:/ { # 先打印当前匹配到DEBUG:的行 print $0 # 如果当前行包含左括号,开始读取后续行直到找到右括号 if ($0 ~ /\(/) { while (getline > 0) { print $0 # 找到右括号就停止读取后续行 if ($0 ~ /\)/) break } } }' your_log_file.log
命令逻辑说明:
- 第一步:匹配所有包含
DEBUG:的行,先把这一行打印出来 - 第二步:如果当前行同时包含
(,就进入循环读取下一行,每读一行就打印,直到碰到包含)的行才停止 - 这样不管是单行的DEBUG日志,还是跨多行的(从带
DEBUG:和(的行开始,到对应)结束的)日志,都能完整输出,同时过滤掉所有不含DEBUG:的无关行
实时日志处理(结合tail -f)
如果是要监控实时日志,直接把tail的输出管道给awk就行:
tail -f your_log_file.log | awk '/DEBUG:/ { print $0 if ($0 ~ /\(/) { while (getline > 0) { print $0 if ($0 ~ /\)/) break } } }'
备选方案(sed,适合没有awk的极端情况)
如果你的环境里真的没有awk,也可以试试sed命令,不过逻辑相对绕一点:
'/DEBUG:/{:loop;N;/\)/!bloop;p;d}' your_log_file.log
逻辑说明:
- 匹配到
DEBUG:的行后,开始不断追加下一行(N),如果没找到)就回到循环开头(:loop是标签,bloop跳转回标签),直到找到)就打印整段内容,然后跳过其他无关行
内容的提问来源于stack exchange,提问作者Gregor Isack
相关产品推荐
相关产品推荐

