如何在文件中添加代码块?

时间:2014-12-02 17:23:57

标签: linux text sed

我在一些设置文件中进行了此设置:

<datasource jndi-name="java:jboss/datasources/DS" pool-name="mysqlDS">
    <connection-url>jdbc:mysql://localhost:3306/DSDB</connection-url>
    <driver>mysqlDriver</driver>
    <pool>
        <min-pool-size>10</min-pool-size>
        <max-pool-size>200</max-pool-size>
        <prefill>true</prefill>
        <use-strict-min>false</use-strict-min>
        <flush-strategy>FailingConnectionOnly</flush-strategy>
    </pool>
    <security>
        <security-domain>csa-encryption-sec</security-domain>
    </security>
    #block of code needs to be inserted HERE
</datasource>

这是需要插入的代码块:

<validation>
    <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
    <background-validation>true</background-validation>
    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"></valid-connection-checker>
    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"></exception-sorter>
</validation>

我只使用了 sed 简单的东西,但我不知道如何正确使用它,因为我不想替换任何文本,只需添加块另一个内部的代码。有什么想法或建议吗?

3 个答案:

答案 0 :(得分:1)

使用sed,您可以使用r command执行以下操作:

  • 如果您在文件中有代码块(名为验证):

    sed "14r validation" standalone.xml
    
  • 如果你在变量($validation)中有它:

    sed "14r"<(cat <<<"$validation") file
    

在第一种方法中,sed只需插入文件验证

在第二个中,我们必须根据$validation中的数据制作文件 实现此目的的一种方法是使用bash的Here Strings我注意到你在自我回答中使用了bash )和Process Substitution
使用cat <<<"$validation",我们将$validation扩展为cat的标准输入。

答案 1 :(得分:0)

这是我迄今为止开发的内容。我担心它是否是一种智能方法。 因为对我而言,它看起来并不优雅:(

#!/bin/bash

validation='\<validation\> \
    \<check-valid-connection-sql\>SELECT 1\<\/check-valid-connection-sql\> \
    \<background-validation\>true\<\/background-validation\> \
    \<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"\>\<\/valid-connection-checker\> \
    \<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"\>\<\/exception-sorter\> \
\<\/validation\>'

sed -i "15i $validation" standalone.xml

答案 2 :(得分:0)

你经常需要这么做吗? (那就是那种经常启用/禁用的验证?)。

git怎么样?只需使用源代码控制系统,然后你就可以拥有一个带有额外块的文件版本和另一个没有额外块的文件。

只是一个想法。