次の内容のファイルがあります。
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
そして、1行目の「名前」を「何か」に、2行目の「パスワード」を「何か」に、3行目の「名前」を「何か」に変更するスクリプトを作成する必要があります。ファイル内で発生するこれらの順序に依存することはできないため、「name」の最初の出現を「something」に、2回目の「name」の出現を「somethingdifferent」に単純に置き換えることはできません。正しいものを見つけて置き換えるために、実際に周囲の文字列を検索する必要があります。
これまでのところ、最初の「名前」の出現を見つけて置き換えるためにこのコマンドを試しました。
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
しかし、それは機能していないので、これらのキャラクターのいくつかはエスケープする必要があるなどと考えています。
理想的には、正規表現を使用して、2つの「ユーザー名」の出現を一致させ、「名前」のみを置換できるようにしたいです。このしかし、とのような何かsed
:
<username>.+?(name).+?</username>
括弧内の内容を「何か」に置き換えます。
これは可能ですか?