Após algumas pesquisas no Google e vencimentos, recebi um comando estável para fazer isso.
sed $'/<\/xa-datasource>/{e cat inputfile.txt\n}' file1.txt
inputfile.txt é o arquivo que precisamos inserir antes da string correspondente
Eu estou tentando adicionar conteúdo de um arquivo de texto ao meio de outro arquivo de texto, que também antes de uma determinada string. Eu usei o comando abaixo para adicionar texto depois de uma sequência de caracteres como
sed '/line3/ r data.txt' file1.txt (this will add contents of data.txt to file1.txt after "line3" string.
Eu estou tentando adicionar o conteúdo do arquivo antes de uma string específica. Eu não posso garantir o número da linha, então eu não posso usar esse método.
Por exemplo,
<xa-datasource-property
name="URL">jdbc:oracle:thin:@otto.na.ad.atg.com:1521:ora10r2</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>
Eu quero adicionar o conteúdo de data.txt antes de </xa-datasource>
string.
Você pode fazer isso usando a inserção sed com substituição de comando bash
sed "/<\/xa-datasource>/i $(<inputFile.txt)" file1.txt
desta forma, o texto de dentro de inputFile.txt será inserido na linha anterior a </xa-datasource>
Se você quer que ele seja inserido antes da string dada, mas na mesma linha, você pode usar a substituição de sed em vez de inserir:
sed "s/<\/xa-datasource>/ $(<inputFile.txt)<\/xa-datasource>/" file1.txt
com a segunda maneira, você está substituindo a string combinada pela nova, então você deve incluí-la no final da string de substituição
Algumas pessoas preferem usar backtics ''
em vez de $()
devido a razões de portabilidade, mas eu prefiro a segunda forma se for para bash apenas porque parece mais legível para mim
Tags bash sed shell-script