1行に2つのパターンの間に印刷

1行に2つのパターンの間に印刷

次の内容を含むファイルがあります。

<alarm="yes">
<moduleId>aaa</moduleId>
<documentation>
<description>bbb</description>
<Object>ccc</Object>
</documentation>
</alarmSpecification>
<alarm="yes">
<moduleId>bbb</moduleId>
<documentation>
<description>abc</description>
<Object>xxx</Object>
</documentation>
</alarmSpecification>

パターンを合わせて一行で印刷したいです。ここでモードはアラーム&アラーム仕様です。出力は次のとおりです。

<alarm="yes">,<moduleId>aaa</moduleId>,<documentation>,<description>bbb</description>,<Object>ccc</Object>,</documentation>,</alarmSpecification>
<alarm="yes">,<moduleId>aaa</moduleId>,<documentation>,<description>bbb</description>,<Object>ccc</Object>,</documentation>,</alarmSpecification>

実装方法をご案内ください。

ベストアンサー1

これは有効なXMLではないようであるため、次のプレーンテキスト処理を使用することをお勧めしますsed

sed 'H;/<alarm=/h;/<\/alarmSpecification>/!d;g;s/\n/,/g'
  • HH既存のスペースに行を追加する
  • /<alarm=/h<alarm新しいフィールドで収集された行をリセットします。
  • /<\/alarmSpecification>/!d警告でない場合、指定された行で停止
  • それ以外の場合、予約済みスペースに収集されたilnesは改行gで置き換えられます。,s/\n/,/g

おすすめ記事