从日志文件中提取特定的 XML
Extract specific XMLs from log file
我有很大的日志文件(每个大约 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”并且状态属性设置为"Activated"
的XMLs
通过使用 "sed" 我能够提取所有信封,目前我正在使用正则表达式来检查上面的条件是否存在于其中(通过 运行 所有这些都在一个循环)。
sed -n '/<envelope>/,/<\/envelope>/p' logfile
从文件中提取我需要的内容的正确解决方案是什么?
谢谢!
假设您的 xml 格式如图所示,这应该有效...
$ awk '/<envelope>/ {line=[=10=]; p=0; next}
line {line=line ORS [=10=]}
/uniqueid/ && ~/12345/ {p=1}
/<\/envelope>/ && p {print line}' file
使用开始标签,开始累积行,如果找到所需的行,则设置标志,如果设置标志,则使用结束标签打印记录。
使用 gawk
你可以这样做
$ awk -F'\n' -v RS='</envelope>\n' \
'~/uniqueid.*12345/ && ~/status.*Activated/{print [=11=], RT}' file
虽然会有一个额外的换行符。
我有很大的日志文件(每个大约 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”并且状态属性设置为"Activated"
的XMLs通过使用 "sed" 我能够提取所有信封,目前我正在使用正则表达式来检查上面的条件是否存在于其中(通过 运行 所有这些都在一个循环)。
sed -n '/<envelope>/,/<\/envelope>/p' logfile
从文件中提取我需要的内容的正确解决方案是什么?
谢谢!
假设您的 xml 格式如图所示,这应该有效...
$ awk '/<envelope>/ {line=[=10=]; p=0; next}
line {line=line ORS [=10=]}
/uniqueid/ && ~/12345/ {p=1}
/<\/envelope>/ && p {print line}' file
使用开始标签,开始累积行,如果找到所需的行,则设置标志,如果设置标志,则使用结束标签打印记录。
使用 gawk
你可以这样做
$ awk -F'\n' -v RS='</envelope>\n' \
'~/uniqueid.*12345/ && ~/status.*Activated/{print [=11=], RT}' file
虽然会有一个额外的换行符。