我有一个看起来像这样的XML文件:
<verzekerde>
<voorletters>FD</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>King</achternaam>
<adres>
<straat>Kingsroad</straat>
<huisnummer>115</huisnummer>
<toevoeging> </toevoeging>
<postcode>1123 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>F</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Prince</achternaam>
<adres>
<straat>Prince Avenue</straat>
<huisnummer>5</huisnummer>
<toevoeging> </toevoeging>
<postcode>1225 PG</postcode>
<plaats>PRINCETOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>C</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Queen</achternaam>
<adres>
<straat>Queensroad</straat>
<huisnummer>11</huisnummer>
<toevoeging> </toevoeging>
<postcode>1113 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
如果字符串KINGSTOWN存在,我想在<verzekerde>
和</verzekerde>
之间提取所有部分,因此结果应为:
<verzekerde>
<voorletters>FD</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>King</achternaam>
<adres>
<straat>Kingsroad</straat>
<huisnummer>115</huisnummer>
<toevoeging> </toevoeging>
<postcode>1123 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>C</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Queen</achternaam>
<adres>
<straat>Queensroad</straat>
<huisnummer>11</huisnummer>
<toevoeging> </toevoeging>
<postcode>1113 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
我试过了sed -n '/KINGSTOWN/,/\<\/verzekerde\>/p'
,但这只给了我从<plaats>KINGSTOWN</plaats>
到</verzekerde>
有没有办法让这些行达到<verzekerde>
?
我想将它集成在一个bash脚本中。
谢谢你帮助我!
答案 0 :(得分:2)
使用xpath
grep XML文档。
给出以下XML文档。
<root>
<verzekerde>
<voorletters>FD</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>King</achternaam>
<adres>
<straat>Kingsroad</straat>
<huisnummer>115</huisnummer>
<toevoeging> </toevoeging>
<postcode>1123 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>F</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Prince</achternaam>
<adres>
<straat>Prince Avenue</straat>
<huisnummer>5</huisnummer>
<toevoeging> </toevoeging>
<postcode>1225 PG</postcode>
<plaats>PRINCETOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>C</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Queen</achternaam>
<adres>
<straat>Queensroad</straat>
<huisnummer>11</huisnummer>
<toevoeging> </toevoeging>
<postcode>1113 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
</root>
以下命令
$ xpath -q -e '//verzekerde[adres/plaats/text()="KINGSTOWN"]' data.xml
提取您要查找的节点
<verzekerde>
<voorletters>FD</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>King</achternaam>
<adres>
<straat>Kingsroad</straat>
<huisnummer>115</huisnummer>
<toevoeging> </toevoeging>
<postcode>1123 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
<verzekerde>
<voorletters>C</voorletters>
<tussenvoegsel> </tussenvoegsel>
<achternaam>Queen</achternaam>
<adres>
<straat>Queensroad</straat>
<huisnummer>11</huisnummer>
<toevoeging> </toevoeging>
<postcode>1113 GP</postcode>
<plaats>KINGSTOWN</plaats>
<land>NL</land>
</adres>
</verzekerde>
该命令在以下包中的Debian上:
$ dpkg -S $(type -p xpath)
libxml-xpath-perl: /usr/bin/xpath
答案 1 :(得分:0)
awk
救援!
$ awk 'BEGIN{ORS=RS="</verzekerde>\n"} /KINGSTOWN/' xml