将文本文件的内容添加到其他文本文件的中间特定字符串之前

将文本文件的内容添加到其他文本文件的中间特定字符串之前

我正在尝试将一个文本文件的内容添加到另一个文本文件的中间,并且也添加到特定字符串之前。我使用以下命令在特定字符串后添加文本,例如

sed '/line3/ r data.txt' file1.txt (this will add contents of data.txt to file1.txt after "line3" string.

我正在尝试将文件内容添加到特定字符串之前。我无法确定行号,因此无法使用该方法。

例如,

    <xa-datasource-property
 name="URL">jdbc:oracle:thin:@domain.com:1521:ora12121</xa-datasource-
property>
    <xa-datasource-property name="User">username</xa-datasource-property>
    <xa-datasource-property name="Password">password</xa-datasource-property>
    <!-- Uncomment the following if you are using Oracle 9i
    <xa-datasource-property name="oracle.jdbc.V8Compatible">true</xa-
datasource-property>
   -->
    <exception-sorter-class-name>
        org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
    </exception-sorter-class-name>
  </xa-datasource>

</xa-datasource>我想在字符串之前添加 data.txt 的内容 。

答案1

您可以使用 sed insert 和 bash 命令替换来完成此操作

sed "/<\/xa-datasource>/i $(<inputFile.txt)" file1.txt

这样 inputFile.txt 中的文本将插入到前面的行中</xa-datasource>

如果希望将其插入到给定字符串之前但在同一行,则可以使用 sed 替换而不是插入:

sed "s/<\/xa-datasource>/ $(<inputFile.txt)<\/xa-datasource>/" file1.txt

使用第二种方法,您将用新字符串替换匹配的字符串,因此必须将其包含在替换字符串的末尾

''由于可移植性原因,有些人更喜欢使用反引号$(),但如果只用于 bash,我更喜欢第二种形式,因为它对我来说看起来更易读

答案2

经过一些谷歌搜索和实验后,我得到了一个稳定的命令来执行此操作。

 sed $'/<\/xa-datasource>/{e cat     inputfile.txt\n}' file1.txt

inputfile.txt 是我们需要在匹配字符串之前插入的文件

相关内容