2017-05-22 9 views
-2

これは私が名前のシェルスクリプトを使用して= "船" + currentdatetimeにOチェンジ名= "船" をしたいxmlファイル属性をシェルスクリプトで新しい値(日付時間を追加)で更新する方法は?

<Deployer exitOnError="true" sourceType="Repository"> 
<Projects projectPrefix=""> 
<SubProject description="" name="Ship" overwrite="false" type="Repository"> 
</SubProject> 
</Projects> 
</Deployer> 

以下の私のxmlです。どんな助けもありがたい。

私は、好ましくは、SEDやAWKを使用したい(私は私のLinuxマシン上のXMLツールボックスを持つことができないようxmlstarletをたくない)

私が試した、下記見つけてください。

sed "/DeployerSpec>/,<Project description='' name='bstar' overwrite='false' type='Repository'>" file 

sed -i 's:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar" overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:<DeployerSpec exitOnError="true" sourceType="Repository"><Projects projectPrefix=""><Project description="" name="bstar"+$(date+%x_%r) overwrite="false" type="Repository"></Project></Projects></DeployerSpec>:' sample.xml 

sed -i.bak "s/<Project description='' name='bstar' overwrite='false' type='Repository'>/<Project description='' name='bstar'+$(date +%x_%r) overwrite='false' type='Repository'>/g" a.xml 
+0

のための彼らの態度を再考する必要性を持っているでしょう - しかし、彼らがそうであるように、あなたが簡単にそれらをインストールすることができます – RomanPerekhrest

+0

xmlデータを操作するための適切なツールが私のクライアントでは承認されていませんが、私のマネージャーはこれをシェルスクリプトだけで修正しようとしています! –

+0

'私のマネージャは、シェルスクリプトだけでこれを修正しようとしています'と書いたものを書いてしまいました... – Sundeep

答えて

1

試してみてください。

DATE=$(date) 
sed 's/Ship/& '"${DATE}"'/g' Input_file 

は、単に船と現在の日付と文字列の船を置換するsedを使用して、現在の日付を持っているという名前の変数DATEを作成します。

2

マネージャーとクライアントとの闘争は永遠のプロセスです...私は理解しています。
あなたの単純なケースでは、あなたが使用することSEDアプローチ:

sed -i 's/name="Ship"/name="'"$(date)"'"/g' your.xml 

xmlファイルの内容を(あなたがあなたのロケールで異なる日時があるでしょう):

<Deployer exitOnError="true" sourceType="Repository"> 
<Projects projectPrefix=""> 
<SubProject description="" name="Mon 22 May 15:41:23 EEST 2017" overwrite="false" type="Repository"> 
</SubProject> 
</Projects> 
</Deployer> 

  • -i - ファイルをインプレースで変更する

  • $(date) - それは親要素ServiceProjectの子だとその親がすべき場合には、「属性変更name値のような、より複雑で高度なタスクが存在することになる場合は、とにかく


現在のDateTime値を取得します属性balance1000より大きい子要素cityもあります。 Unixシェルツールは、そのような場合に失敗し、私は私のLinux *上のXMLツールボックスを持つことはできません*あなたのマネージャーは、XMLパーサ

0
sudo sed -i '/<Project\s\description=""/s/name="[^"]*/name="'"$(date)"'"/g' Demo.xml 
+0

このコードをご覧いただきありがとうございます。すぐに役立つかもしれません。適切な説明は、なぜ*これが問題の良い解決策であるかを示すことによってその教育上の価値を大幅に改善し(// meta.stackexchange.com/q/114762)、将来の同様の、しかし、同一ではない質問。説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 'sudo'の使用を提案する前に、エラーを修正してください! –

関連する問題