web-dev-qa-db-ja.com

特定の文字列の前にある他のテキストファイルの途中にテキストファイルのコンテンツを追加する

テキストファイルの内容を他のテキストファイルの中央に追加しようとしています。これも特定の文字列の前です。以下のコマンドを使用して、次のような特定の文字列の後にテキストを追加しました

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の内容を追加したい。

4
Unnikrishnan

いくつかのグーグル検索と実験の後、私はこれを行うための安定したコマンドを得ました。

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

inputfile.txtは、一致する文字列の前に挿入する必要があるファイルです。

1
Unnikrishnan

あなたはbashコマンド置換でsed挿入を使用してそれを行うことができます

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

これにより、inputFile.txt内のテキストが_</xa-datasource>_の前の行に挿入されます

指定された文字列の前で同じ行に挿入する場合は、insertの代わりにsed置換を使用できます。

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

2番目の方法では、一致した文字列を新しい文字列に置き換えるため、置換文字列の最後に含める必要があります

ポータビリティ上の理由から、$()ではなくbacktics _''_を使用することを好む人もいますが、bashの場合は2番目の形式の方が読みやすく、

2