Додавання вмісту текстового файлу до середини іншого текстового файлу перед певним рядком


3

Я намагаюся додати вміст текстового файлу до середини іншого текстового файлу, що теж перед певним рядком. Я використовував команду нижче, щоб додати текст після рядка з деталями, як

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>

Я хочу додати вміст data.txt перед </xa-datasource>рядком.

Відповіді:


2

Ви можете зробити це за допомогою sed insert з командою bash substition

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

таким чином текст із внутрішнього inputFile.txt буде вставлений у попередній рядок </xa-datasource>

Якщо ви хочете, щоб він був вставлений перед заданим рядком, але в тому ж рядку, ви можете використовувати заміну sed замість вставки:

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

другим способом ви замінюєте відповідні рядки на нові, тому ви повинні включити його в кінці рядка заміни

Деякі люди вважають за краще використовувати задню панель ''замість $()причин переносимості, але я віддаю перевагу другій формі, якщо вона лише для башти, оскільки для мене це виглядає більш читабельно


Дякую за відповідь. Це спрацювало. Але це не працює при спробі того ж на іншій рядку. Чи можете ви прокоментуйте, будь ласка, синтаксис? root @ vagrant: / home / vagrant # sed "/ line3 / i" "$ (<data.txt)" file1.txt sed: не вдалося знайти мітку для переходу на `його '
Unnikrishnan

Оскільки мій текстовий вміст має букву "t", це вважає його міткою.
Unnikrishnan

1
Це прекрасне рішення, коли у вас немає GNU sed, наприклад , на macOS / BSD, оскільки eкоманда у прийнятій відповіді є специфічним для GNU розширенням. Зауважте, що ви можете насправді котирувати різні цитати один проти одного, так що це також спрацювало б: sed 's/<\/xa-datasource>/ '$(<inputFile.txt)'<\/xa-datasource>/' file1.txt- $(command)частина діє так само, як рядок з подвійним котируванням. Це може врятувати вас від схуднення, намагаючись уникнути зворотної косої риси s///висловлення з подвійним цитуванням , скажімо, якби там були символи, яких потрібно захистити від оболонки, наприклад $.
TheDudeAbides

1

Після декількох пошуків і результатів пошуку в Google я отримав стабільну команду зробити це.

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

inputfile.txt - це файл, який нам потрібно вставити перед відповідним рядком

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.