sed コマンドを使用して xml ファイル内の特定の場所にテキストを挿入する

sed コマンドを使用して xml ファイル内の特定の場所にテキストを挿入する

sedコマンドを使用してxmlファイルにテキストを挿入する方法を見つけようとしています。私はいくつかの基本的なコマンドを試して、sedを使い始めました。

sed -i -e ' <property name="prop1" ref="ANOTHER_BEAN" /> ' my_config_file.xml  

この行を追加しますが、私が望む場所には追加されません。

私の特定のケースの問題は、テキストをどこかに追加する必要があることです(Java構成ファイルなので、いくつかの空)。

はい

 <bean id="BEAN_ID_1"
    class="com.toto.BeanClass1"
    scope="prototype">
    <property name="prop1" ref="ANOTHER_BEAN_1" />
    <property name="prop2" ref="BEAN1" />
 </bean>

<bean id="BEAN_ID_2"
    class="com.toto.BeanClass2"
    scope="prototype">
    <property name="prop_1" ref="ANOTHER_BEAN_2" />
    <property name="prop_2" ref="BEAN2" />
 </bean>

この属性を囲むタグの前に「BEAN_ID_1」という名前のBeanに追加したいと思います。

 <property name="property" ref="ANOTHER_BEANXXX" />

したがって、出力は次のようになります。

 <bean id="BEAN_ID_1"
    class="com.toto.BeanClass1"
    scope="prototype">
    <property name="prop1" ref="ANOTHER_BEAN_1" />
    <property name="prop2" ref="BEAN1" />
    <property name="property" ref="ANOTHER_BEANXXX" />
 </bean>

<bean id="BEAN_ID_2"
    class="com.toto.BeanClass2"
    scope="prototype">
    <property name="prop_1" ref="ANOTHER_BEAN_2" />
    <property name="prop_2" ref="BEAN2" />
 </bean> 

PS:本番ではファイルがどのように見えるかわからないため、行番号に頼ることはできません。

誰でもこの問題を解決するのに役立ちますか?ありがとう

ベストアンサー1

XMLパーサー/エディタを使用してXMLを編集することsed

XMLの例を修正し、すべてを終了して<beans>...</beans>有効なXMLにしました。以下を使用するソリューションは次のとおりですxmlstarlet

xmlstarlet edit --subnode '//bean[@id="BEAN_ID_1"]' -t elem -n property --var this '$prev' --insert '$this' -t attr -n name -v property --insert '$this' -t attr -n ref -v 'ANOTHER_BEANXXX' configFile

出力

<?xml version="1.0"?>
<beans>
  <bean id="BEAN_ID_1" class="com.toto.BeanClass1" scope="prototype">
    <property name="prop1" ref="ANOTHER_BEAN_1"/>
    <property name="prop2" ref="BEAN1"/>
    <property name="property" ref="ANOTHER_BEANXXX"/>
  </bean>
  <bean id="BEAN_ID_2" class="com.toto.BeanClass2" scope="prototype">
    <property name="prop_1" ref="ANOTHER_BEAN_2"/>
    <property name="prop_2" ref="BEAN2"/>
  </bean>
</beans>

この行の説明xmlstarlet

# Edit the XML, writing the result to stdout
xmlstarlet edit

# Create a subnode called "property" of "//bean" having an attribute id="BEAN_ID_1"
--subnode '//bean[@id="BEAN_ID_1"]' -t elem -n property

# Identify this new element as "this"
--var this '$prev'

# Insert an attribute called "name" with a value "property" into the new element
--insert '$this' -t attr -n name -v property

# Insert an attributed called "ref" with a value "ANOTHER_BEANXXX" into the new element
--insert '$this' -t attr -n ref -v 'ANOTHER_BEANXXX'

# XML source file
configFile

おすすめ記事