<asd>blablabla</asd>
以下を含むXMLファイルがあります。
<dsa>-some stuff
-other stuff
final stuff.</dsa>
「asd」タグ間のすべての項目を「dsa」タグ間の項目に置き換えたいと思います。これはほぼ100%の数行です。タグ自体を変更するのではなく、タグ間のテキストだけを変更して改行を維持したいと思います。
ファイルは随時変更され、名前、拡張子、およびタグは同じままで、その間の内容のみが変更されます。
基本的なベアbash(Github Actionsで使用される種類)でこれを実行できるコマンドが必要です。
考えていますが、sed
複数行に変えてどう言うべきかわかりません。
編集:私の間違い(おそらく?)は、私のファイルが実際のXMLファイルではなく実際に.net csprojファイルであったため、同様のコマンドが機能するかどうか
わからないということです。xmlstarlet
ベストアンサー1
正しい形式のXML文書を想定します。
<root>
<asd>blablabla</asd>
<dsa>-some stuff
-other stuff
final stuff.</dsa>
</root>
次のように、xmlstarlet
最上位asd
ノードの内容をそのノードの内容に簡単に置き換えることができます。dsa
$ xmlstarlet ed -u '/root/asd' -x '/root/dsa/text()' file.xml
<?xml version="1.0"?>
<root>
<asd>-some stuff
-other stuff
final stuff.</asd>
<dsa>-some stuff
-other stuff
final stuff.</dsa>
</root>
asd
各ノードを兄弟ノードに置き換える必要があるより複雑な例は次のとおりですdsa
。
<?xml version="1.0"?>
<root>
<node1>
<asd>blablabla</asd>
<dsa>-some stuff
-other stuff
final stuff.</dsa>
</node1>
<node2>
<asd>REPLACE ME</asd>
<dsa>REPLACE WITH THIS</dsa>
</node2>
</root>
これは次の方法で行うことができます。
$ xmlstarlet ed -u '//asd' -x '../dsa/text()' file.xml
<?xml version="1.0"?>
<root>
<node1>
<asd>-some stuff
-other stuff
final stuff.</asd>
<dsa>-some stuff
-other stuff
final stuff.</dsa>
</node1>
<node2>
<asd>REPLACE WITH THIS</asd>
<dsa>REPLACE WITH THIS</dsa>
</node2>
</root>