我有很大的日志文件(每个文件约50mb),其中包含Java调试信息以及各种XML响应
这是我要从日志中提取内容的示例
<envelope>
<response>
<ATTR name="uniqueid" value="XYZ_00000-00-00_12345_1"/>
<ATTR name="status" value="Activated"/>
<ATTR name="datecreated" value="2018/10/04 09:39:05"/>
</response>
</envelope>
我只需要uniqueid属性包含“ 12345”并且status属性设置为“ Activated”的XML
通过使用“ sed”,我能够提取所有信封,并且当前我正在使用正则表达式来检查其中是否存在上述条件(通过循环运行所有条件)。
sed -n '/<envelope>/,/<\/envelope>/p' logfile
从文件中提取我需要的东西是什么合适的解决方案?
谢谢!
答案 0 :(得分:1)
假设您的xml格式如下所示,这应该可以工作...
$ awk '/<envelope>/ {line=$0; p=0; next}
line {line=line ORS $0}
/uniqueid/ && $3~/12345/ {p=1}
/<\/envelope>/ && p {print line}' file
使用开始标签,如果发现所需的行设置了标志,则开始累积行;如果设置了标志,则结束标记,开始记录。
使用gawk
可以代替
$ awk -F'\n' -v RS='</envelope>\n' \
'$3~/uniqueid.*12345/ && $4~/status.*Activated/{print $0, RT}' file
不过会有多余的换行符。