RHELでは以下を活用できました。sed-iファイルの文字列を置き換えるコマンドですが、AIXでは同じ-iパラメーターを使用できないようです。
次の内容を含むabc.xmlというファイルがあります。
<test0/>
<test1/>
<config/>
<test2/>
次のコマンドを使用しようとしています。
sed -i "s+<config />+<config>3242352353242342424</config>+g" /etc/abc.xml
abc.xmlファイルのパラメータを次のように置き換えます。
<test0/>
<test1/>
<config>3242352353242342424</config>
<test2/>
上記の内容は可能ですか?
ベストアンサー1
sed
正規表現の空白が表示されているサンプル文書と一致しないため、あなたのコマンドはRedHatで動作するようには思えません。また、同じ行中心のテキスト編集ツールを使用してくださいsed
。
2番目の問題は、-i
非標準オプションを使用することです。内部編集のための移植可能な方法はQ / Aで説明されています。sed -i(所定の位置で編集)を使用して移植性を達成するには?
XML文書の形式が正しいと仮定すると、通常、コマンドラインXMLパーサーを使用して文書の内容を変更します。
そのようなコマンドラインXMLパーサーの1つがありますxmlstarlet
。
xmlstarlet ed -u '//config' -v 3242352353242342424 file.xml
これにより、すべてのノードの値が文字列(config
必要に応じて3242352353242342424
正しくエンコードされている)に設定されます。xmlstarlet
以前の値はすべて削除され、config
ノードのすべての属性は保持されます。
変更された文書は標準出力に書き込まれるため、新しいファイルにリダイレクトできます。コマンドラインで--inplace
サブコマンドの後にオプションを使用することもできます。ed
xmlstarlet
はい働くことが知られているLinux および AIX の場合。