所以我有这个xml行示例,它是从中读取的,
<element attr1=”XX” attr2=”0818820\.x11” attr3=”YYXX.x11” attr-4=”1”/>
因为它是xml,所以元素的顺序是随机的,有些可能是可选的。
因此,使用awk时,我尝试选择其中之一,例如使用gensub选择attr1。
while (getline < "./file") {
print $0
#First attempt
#print gensub(/.*attr1=\"(.*)\".*/,"\\1","g",$0)
#Second attempt
print gensub(/.*attr1="(.*)".*/,"\\1","g",$0)
}
但是,我没有设法匹配它,但是返回了整行(可能没有匹配,但也可以全部匹配)。有人有主意吗?我将无法修改输入参数。
BR 帕特里克
答案 0 :(得分:0)
假设输入在file.txt中
$ cat file.txt
<element attr1=”XX” attr2=”0818820\.x11” attr3=”YYXX.x11” attr-4=”1”/>
然后使用grep提取属性,然后在=上拆分。如下:
$ egrep -o "attr[0-9]+[^ ]* " file.txt | awk -F= '{print $1"\t"$2}'
attr1 ”XX”
attr2 ”0818820\.x11”
attr3 ”YYXX.x11”
如果只需要attr1,请选择attr1:
$ egrep -o "attr[0-9]+[^ ]* " file.txt | awk -F= '/attr1/{print $2}'
”XX”
您可以为其他属性调整grep行。例如如果需要end属性,则插入空格会使逻辑更简单:
$ sed < file.txt 's|/| |g' | egrep -o "attr[^ ]* "
attr1=”XX”
attr2=”0818820\.x11”
attr3=”YYXX.x11”
attr-4=”1”
答案 1 :(得分:0)
没有理由重新发明轮子。 gawk-xml documentation提到了awk的多个xml解析器,例如Jan Weber的getXML脚本(在互联网上浮动,我找到了here)。测试产生的结果:
$ awk -f getXML.awk test.xml
TAG element
attr-4=”1”
attr1=”XX”
attr2=”0818820\.x11”
attr3=”YYXX.x11”
END element