AIX - Sedを使用してファイルの文字列を置き換える

AIX - Sedを使用してファイルの文字列を置き換える

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 の場合。

おすすめ記事