我有一个类似XML的示例:
<soap:Body
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<GetRooms_V2Response
xmlns="http://tempuri.org/">
<GetRooms>
<Allocations>
<AllocationID>426231</AllocationID>
<AllocationName>Edinburgh Carlton Hotel</AllocationName>
<ValidFrom>2014-11-01T00:00:00</ValidFrom>
<ValidTo>2020-12-31T00:00:00</ValidTo>
<RoomTypes>Double Room</RoomTypes>
<BookingType>1</BookingType>
<PriceType>523</PriceType>
<IsBar>true</IsBar>
<Days> … (details omitted due to size)
</Allocations>
<Allocations>
我想在AllocationID.../AllocationID
之间提取数据
和RoomTypes.../RoomTypes
。我不想要一个多行脚本,因为在输入这些数据之前我会更多的东西。
我试过这样的东西,但它一次只读取一个标签:
sed -n 's:.*AllocationID\(.*\)/AllocationID.*:\1:p' test.xml
这不起作用:
sed -n 's:.*AllocationID\(.*\)/AllocationID.*\RoomTypes\(.*\)</RoomTypes).*:\1,\2:p' test.xml
任何人都可以解释一下最好的方法吗?
答案 0 :(得分:0)
这提取了你需要的东西:
sed -nE 's/(<AllocationID>(.*)<.*|<RoomTypes>(.*)<.*)/\2\3/gp' test.xml
我把文件加倍了。 输出:
426231
Double Room
426231
Double Room