XMLファイルの特定の行を一緒にリンクするだけです。

XMLファイルの特定の行を一緒にリンクするだけです。

このXMLを次に変換したいと思います。確認する互いに接続された線。これにより、後で特定の行だけをキャッチできます。このXMLが属性を使用した場合、データはすでに1行にあります。これを行うためにXSLTを使用したくありません。 grep、sed、awk、xmlstarlet、xpathが良いでしょう。

したがって、1行にが含まれている場合は、"<instruction>"次の4行を取得し、すべて1行に配置する必要があります。カンマはありません。次のようになります。

投稿された質問とは異なります。ここ:「参加」順序を開始する日付としてモードを設定します。

awk '
    /\<instruction\>/ && line {print line; line=""}
    {line = line ? line" "$0 : $0}
    END {print line}
'

これにより、行が閉じるタグに縮小されますが、閉じるタグ行自体は導入されません。

プラットフォームは Windows 2012R2 サーバーにあります。 Gnuユーティリティがインストールされます。ファイルサイズは約100kです。

                        <instruction>
                          <name>AAAAA</name>
                          <value>WHITE</value>
                          <type>0</type>
                        </instruction>
                        <instruction>
                          <name>BBBBB</name>
                          <value>WHITE</value>
                          <type>0</type>
                        </instruction>
                        <instruction>
                          <name>CCCCC</name>
                          <value>WHITE</value>
                          <type>0</type>
                        </instruction>
                      <routing/>
                      <phantom>False</phantom>
                      <AssemblyHistory/>

必要な出力:(改行できますが、ディレクティブ要素はすべて1行にする必要があります)

<instruction><name>AAAAA</name><value>WHITE</value><type>0</type></instruction> <instruction><name>BBBBB</name><value>WHITE</value><type>0</type></instruction> <instruction><name>CCCCC</name><value>WHITE</value><type>0</type></instruction> <routing/> <phantom>False</phantom> <AssemblyHistory/>

同様の例(無効なXML)

data line 2
cust:
tommy
smith
123 main
endcust
data line 16
TRACE: error at xy123
cust:
mary 
smith
444 broadway
endcust
LOG: logon tty3
LOG: free memory before gc 33453211
root: ps -ealf  tty0 


data line 2
cust: tommy smith123 main endcust
data line 16
TRACE: error at xy123
cust:mary smith444 broadway endcust
LOG: logon tty3
LOG: free memory before gc 33453211
root: ps -ealf  tty0 

行を省略せずにファイル全体を標準出力にコピーします。 "cust:"を見つけたら、次のいずれかを実行できます。 1)次の4行を結合するか、2)「終了」が見つかるまで行を結合します。

同様ですが、今回はXMLツールを使用できません。それでは、このような状況が発生した場合はどうすれば解決しますか?最も重要な質問がXMLであれば良いです。そうでない場合は、2番目の例を使用してください。

ベストアンサー1

sedの範囲演算子を使用して問題を解決できますが、その前に同じ行でトークンを処理してフラグを解除する必要があります。同じ行にある複数のタグも処理されません。

sed -e '
    s/^[[:blank:]]*//
    \|<instruction>.*</instruction>|b
    \|<instruction>|,\|</instruction>|!b
    H;\|</instruction>|!d
    s/.*//;x;s/\n[[:blank:]]*//g;s/^\n//
' input_xml_lookalike_file

おすすめ記事