Вставка файла в другой файл после шаблона [дубликат]

0
07.10.2018, 11:30
2 ответа
sed '/pattern/{r file_b
a\

:f
n; b f
}' file_a

Если file_bуже заканчивается символом новой строки, и вы не хотите, чтобы на выходе была пустая строка, пропустите строку a\из скрипта.

В последней строке :fопределяет метку, nсчитывает новую строку, (которая будет напечатана автоматически, так как опция -nне была указана для sed), а b fпереходит к метка f, создавая цикл. Все это для того, чтобы добавить file_bтолько после первой строки , соответствующей шаблону. Если вы хотите добавить file_bпосле каждой строки , соответствующей pattern, это намного проще:

sed '/pattern/r file_b' file_a

Пример:

$ cat file_a
first
second
third
fourth
first
second
third
fourth
$ cat file_b
b1
b2
b3

$ sed '/second/{r file_b
:f n; b f }' file_a
first
second
b1
b2
b3
third
fourth
first
second
third
fourth

$ printf "x\ny\nz" >file_c
$ sed '/second/{r file_c
a
:f n; b f }' file_a
first
second
x
y
z
third
fourth
first
second
third
fourth

$ sed '/second/r file_b' file_a
first
second
b1
b2
b3
third
fourth
first
second
b1
b2
b3
third
fourth

Другим решением было бы использование ed(1)(, которое, как ни странно, недоступно по умолчанию в современных дистрибутивах Linux, несмотря на то, что оно предписано POSIX и присутствует во всех системах unix примерно 45 лет назад):

echo '/pattern/r file_b
w' | ed file_a

Это отредактирует file_aна месте и добавит новую строку, если она есть в конце file_b; если вы хотите, чтобы выходные данные записывались в другой файл, измените wна w output_file.

2
28.01.2020, 02:31

Как насчет

sed '/PATTERN/r a' b
0
28.01.2020, 02:31

Теги

Похожие вопросы