Bash - 比较掩盖某些字段的2个xml字符串

时间:2016-07-11 03:08:46

标签: xml bash sed

想要比较已更改某些已知字段的2个XML字符串。例如,日期字段将始终存在差异。比较两个字符串时,跳过/屏蔽所有出现的日期字段DtField1DtField2

注意:这些格式不是xml格式。

File1中:

<Field1><Field2><Field5></Field5><DtField1>Jan 01 2017,00:00:01</DtField1><Code>052</Code><Desc>This is a test</Desc><DtField2>Jan 01 2001,00:00:26</DtField2><Field4>Company</Field4><Field6></Field6></Field3></Field2></Field1>

文件2:

<Field1><Field2><Field5></Field5><DtField1>Jan 01 2017,00:00:01</DtField1><Code>052</Code><Desc>This is a test</Desc><DtField2>Jan 01 2001,00:00:39</DtField2><Field4>Company</Field4><Field6></Field6></Field3></Field2></Field1>

我尝试使用代码

将字符串分成块
Block1=`sed -n 's:.*<Field1>\(.*\)</Field5>.*:\1:p' File`
Block2=`sed -n 's:.*<Code>\(.*\)</Desc>.*:\1:p' File`
Block3=`sed -n 's:.*<Field4>\(.*\)</Field1>.*:\1:p' File`

并将File1的块与File2进行比较,但每次都可能没有按顺序排列字段。但是,字段将在String1和String2中处于相同位置。

因此,很容易以某种方式掩盖/删除发生的DtField并比较2个字符串。

预期产出:

<Field1><Field2><Field5></Field5><Code>052</Code><Desc>This is a test</Desc><Field4>Company</Field4><Field6></Field6></Field3></Field2></Field1>

0 个答案:

没有答案
相关问题