我遇到了从日志中获取正确的解析格式的问题。
这里是样本:
<user type="A" name="user1" prod="" trunk="data1(none)" trunk_data="tr1" IE="0" thid="id_0x1c682a0">
我需要获得此输出:
user1 data1(none)
获得我需要的数据格式的最佳方法是什么?每次我需要的数据都在&#34;报价&#34;
谢谢
伊万
答案 0 :(得分:2)
对于完整的XML处理,您应该使用XSL Transformations和xsltproc。 XSL文件(比如user.xsl
)将是:
<stylesheet xmlns='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<output method='text'/>
<template match='/'>
<apply-templates select='//user'/>
</template>
<template match='user'>
<value-of select='@name'/>
<text> </text>
<value-of select='@trunk'/>
<text> </text>
</template>
</stylesheet>
然后您将使用:
xsltproc user.xsl my.log
答案 1 :(得分:0)
通过sed,
$ sed 's/.*name=\"\([^"]*\).*trunk=\"\([^"]*\).*/\1 \2/g' file
user1 data1(none)
通过grep,
$ grep -oP '(?<=name=\")[^"]*|(?<=trunk=\")[^"]*' file | paste -d' ' - -
user1 data1(none)
以上命令将获取名称和主干字段的值。
答案 2 :(得分:0)
这应该做:
awk -F\" '{print $4,$8}' file
user1 data1(none)
如果数据字段数确实有变化并且位置确实有所不同,您可以使用此gnu awk
(由于RS而导致的gnu)
awk -v RS="[a-z]*=" -F\" '{$1=$1} a~/^(name|trunk)/{print a $2}{a=RT}' file
name=user1
trunk=data1(none)