xml属性の値を置き換えるには、シェルスクリプトを使用する必要があります。

xml属性の値を置き換えるには、シェルスクリプトを使用する必要があります。

サンプルinput.xmlファイル

<user dn="CN=company,DN=Department">
<role name="ROLE_ADMIN"/>
</user>

出力は

<user dn="String_1,String_2">
<role name="ROLE_ADMIN"/>
</user>

上記の問題の説明に関する提案を教えてください。注:値が空である可能性があるため、dnをハードコードしないでください。たとえば、dn=""

答え1

XMLで作業する代わりに、sed次のXML認識ツールを使用してくださいxmlstarlet

xmlstarlet ed -u '/user/@dn' -v 'String1, String2' input.xml

答え2

コマンドラインXMLパーサー/エディタの使用XMLスター:

$ company="The Company"
$ department="The Department"

$ dn="CN=$company,DN=$department"

$ xml ed -t -u '/user/@dn' -v "$dn" input.xml
<?xml version="1.0"?>
<user dn="CN=The Company,DN=The Department">
  <role name="ROLE_ADMIN"/>
</user>

dnこのコマンドはルートノードの属性を見つけ、そのuser値を$dn拡張値として編集します。

後でプロパティをより簡単に解析できるように、プロパティ値で会社名と次の項目の間により顕著な区切り文字を使用することをお勧めしますdnDN例えば。;,または、userノードに別々の属性として追加します。

答え3

行が常に独立している場合、<user...>これはsedの単純な表現です。

sed "s/^<user .*/<user dn=\"$string1,$string2\">/" input.xml

これでこれを作成すると、$string1両方$string2が変数になります。

たとえば、次のようになります。

$ string1="hello"
$ string2="there"
$ sed "s/^<user .*/<user dn=\"$string1,$string2\">/" input.xml
<user dn="hello,there">
<role name="ROLE_ADMIN"/>
</user>

sed -iを上書きする「内部」置換を使用できますinput.xml

答え4

sedあなたの友達です

 sed '/^<user dn=/s/CN=[^,]*,DN=[^"]*\"/String_1,String2/' filename

それは行わなければなりません。String_1リアルタイムで&を選択するには、変数を使用してこれを達成できます。String_2台本を書く

#!/bin/bash
read -p"Enter string1" str1
read -p"Enter string2" str2
sed -i "/^<user dn=/s/CN=[^,]*,DN=[^\"]*\"/$str1,$str2/" /path/to/input.xml

この-iオプションはファイルを直ちに変更します。


ノート

二重引用符はbash変数の拡張を許可するため、sedスクリプトで使用されます。しかし、同じ理由でパターン自体から二重引用符をエスケープしました。


関連情報