如何通过命令行提取logcat中specificword后的括号内内容?
问题描述
需要从adb logcat输出中提取specificword=及其后方括号内的完整内容(包括空括号specificword=[]的情况),避免返回整行多余数据,期望输出仅保留目标片段。
示例日志:
..., stateEventTime=2025-01-09T17:22:05.635Z)], specificword=[SpecificWord(displayTimestamp=2024-06-01T00:00:00Z, LanguageCode=US English, ScreenId=ABC1-1, EventTime=2025-01-29T19:20:16.521Z)], status=status(more....
当前问题:直接用grep specificword会返回整行无关数据,难以直观解析。
期望输出格式:
specificword=[SpecificWord(displayTimestamp=2024-06-01T00:00:00Z, LanguageCode=US English, ScreenId=ABC0-0, EventTime=2025-01-29T19:20:16.521Z)]
specificword=[]
解决方案
以下几种命令均可实现需求,按需选择:
方法1:使用grep的Perl正则模式(推荐)
adb logcat | grep my.app | grep -oP 'specificword=\[.*?\]'
-o:仅输出匹配到的内容,而非整行-P:启用Perl兼容正则表达式specificword=\[.*?\]:非贪婪匹配specificword=开头到第一个]结束的片段,确保准确捕获空括号或非空括号的内容
方法2:使用sed命令
adb logcat | grep my.app | sed -n 's/.*\(specificword=\[.*\]\).*/\1/p'
-n:默认不输出行,仅打印处理后的结果s/.*\(specificword=\[.*\]\).*/\1/p:将整行中specificword=[...]的部分提取并打印(适用于单行日志中仅存在一个specificword的场景)
方法3:使用awk命令
adb logcat | grep my.app | awk '{match($0, /specificword=\[.*?\]/, arr); print arr[0]}'
match:用正则匹配目标内容并存入数组arrprint arr[0]:打印匹配到的第一个目标片段
内容的提问来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

