子タグ付きタグ間のコンテンツの抽出

子タグ付きタグ間のコンテンツの抽出

「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を使用します。fullNameCustomer Support - Port

最後に、出力-nlに改行文字を追加します。


XMLStarletや他の構造化文書型パーサーを、などの行ベースのテキスト操作ツールとsed比較しないでくださいawk

答え2

希望の出力を得ることができます(追加のスペースを含む)

awk 'NR==1 || (NR >= 15 && NR <= 26)'

または

sed -n '1p; 15,26p'

より良い答えが必要な場合は、より良い質問をしてください。

関連情報