
サンプル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
拡張値として編集します。
後でプロパティをより簡単に解析できるように、プロパティ値で会社名と次の項目の間により顕著な区切り文字を使用することをお勧めしますdn
。DN
例えば。;
,
または、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スクリプトで使用されます。しかし、同じ理由でパターン自体から二重引用符をエスケープしました。