すべて削除ノード!=タグ値

すべて削除ノード!=タグ値

ここでは、XMLパーサーが理想的な方法であることを知っていますが、私の環境には何も使用可能または追加できません。

次の構造に従うXMLを見てみましょう。

<CONTAINER>
  <FOLDER NAME="I_RS_INT">
  </FOLDER>
  <FOLDER NAME="I_R_INR">
  </FOLDER>
  <FOLDER NAME="I_RS_TRN">
  </FOLDER>
</CONTAINER>

<FOLDER NAME=Bashスクリプトで一致するすべてのノードを削除するか、*RS*次のすべてのノードを削除したいと思います。<FOLDER NAME != $var_folder

どんな助けでも大変感謝します!

ベストアンサー1

これにより、トリックを実行できます。

cat /tmp/xml  | sed -e '/<FOLDER NAME=.*RS.*>/ { N; d; }'

2 文字間のパターンに一致する各行に対して/{} 内のコードが実行されます。また、Nは次の行をパターン空間に入れ、次にdは次の行を続行する前に内容全体を削除する。これはすべてのPOSIX互換で機能しますsed

<FOLDER NAME=.*RS.*>との間のすべての行を削除するには、以下を試してください</FOLDER.>

 awk '/<FOLDER NAME=.*RS.*>/,/<\/FOLDER>/ {next} {print}' xmlfile

このnextコマンドは現在の一致の処理を停止します。以下は簡単なものですprint

おすすめ記事