使用“xmlstarlet”或“sed”或“awk”或一些类似工具从文件中提取所需的内容。该流程应该引用特定业务流程的全名,然后应该只提取该特定业务流程之间的内容。
要从中提取内容的文件。
<businessProcesses>
<fullName>Customer Support</fullName>
<description>Use for Customer Support, TDG and Port</description>
<isActive>true</isActive>
<values>
<fullName>Action Item</fullName>
<default>false</default>
</values>
<values>
<fullName>Solved</fullName>
<default>false</default>
</values>
</businessProcesses>
<businessProcesses>
<fullName>Customer Support - Port</fullName>
<description>Telecom team use only</description>
<isActive>true</isActive>
<values>
<fullName>New</fullName>
<default>true</default>
</values>
<values>
<fullName>Open</fullName>
<default>false</default>
</values>
</businessProcesses>
</CustomObject>
所需的输出。
<businessProcesses>
<fullName>Customer Support - Port</fullName>
<description>Telecom team use only</description>
<isActive>true</isActive>
<values>
<fullName>New</fullName>
<default>true</default>
</values>
<values>
<fullName>Open</fullName>
<default>false</default>
</values>
</businessProcesses>
答案1
假设 XML 格式良好(示例缺少CustomObject
开始标记),
$ xmlstarlet sel -t -c '//businessProcesses[fullName="Customer Support - Port"]' -nl file.xml
<businessProcesses>
<fullName>Customer Support - Port</fullName>
<description>Telecom team use only</description>
<isActive>true</isActive>
<values>
<fullName>New</fullName>
<default>true</default>
</values>
<values>
<fullName>Open</fullName>
<default>false</default>
</values>
</businessProcesses>
这使用带有 XPATH 查询的 XMLStarlet,该查询提取具有精确值的子节点businessProcesses
的节点的副本。fullName
Customer Support - Port
最后-nl
在输出中添加换行符。
不要将 XMLStarlet 或任何其他结构化文档格式解析器与面向行的文本操作工具(如sed
、 或 )进行比较awk
。
答案2
您可以获得所需的输出(带有额外的空格)
awk 'NR==1 || (NR >= 15 && NR <= 26)'
或者
sed -n '1p; 15,26p'
如果您想要更好的答案,请提出更好的问题。