我正在尝试将一个文本文件的内容添加到另一个文本文件的中间,并且也添加到特定字符串之前。我使用以下命令在特定字符串后添加文本,例如
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 是我们需要在匹配字符串之前插入的文件