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