Самый простой инструмент здесь может быть sed
. Для того, чтобы вставить b.txt
в a.txt
после 5 - й линии, вы могли бы написать:
sed '5r b.txt' a.txt
sed
читает файл, указанный как аргумент ( a.txt
), построчно. Все строки воспроизводятся в выходных данных так же, как они появлялись во входных данных, если только они не изменены командой.
5
Это адрес (номер строки) , при которой следующая команда должна быть выполнена. Команда, которую мы используем r
, принимает имя файла в качестве аргумента (здесь b.txt
), полностью его читает и вставляет в вывод после текущей строки.
Как указано выше, эта sed
командная строка будет печатать только вывод на терминал, без записи в какие-либо файлы. Вы можете перенаправить его в новый файл (а не во входные файлы!), Используя перенаправление вывода Bash:
sed '5r b.txt' a.txt > c.txt
Или вы можете напрямую изменить внешний входной файл a.txt
с помощью переключателя sed
's -i
(для "на месте"). Если вы напишите его как -i.bak
, он сначала создаст резервную копию исходного входного файла с суффиксом .bak
:
sed -i '5r b.txt' a.txt
Пример:
$ cat a.txt
January
February
March
April
May
October
November
December
$ cat b.txt
June
July
August
September
$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December