「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>
businessProcesses
これは、子ノードの正確な値を持つノードのコピーを抽出するXPATHクエリでXMLStarletを使用します。fullName
Customer Support - Port
最後に、出力-nl
に改行文字を追加します。
XMLStarletや他の構造化文書型パーサーを、などの行ベースのテキスト操作ツールとsed
比較しないでくださいawk
。
答え2
希望の出力を得ることができます(追加のスペースを含む)
awk 'NR==1 || (NR >= 15 && NR <= 26)'
または
sed -n '1p; 15,26p'
より良い答えが必要な場合は、より良い質問をしてください。