Как sed может соответствовать шаблону удалить строку плюс один и вставить другой файл

Я думаю, что я довольно близко, но пропущена 1 команда..

у меня есть file1.txt

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
id="8" efwef
aaaaaaaaaaaaaaaaaaa
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

file2.txt

123

123

что мне нужно это:

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

объяснил: найти шаблон (id="8") удалить строку шаблона +1 вставить в файл file1.txt файл file2.txt

я получил эту команду сед

sed -e '/id="8"/,+1{' -e 'r /tmp/file2.txt' -e 'd' -e '}' -i /tmp/file1.txt

он делает все, что мне нужно... кроме того, что вставляет file2.txt дважды...

вероятно, потому что ,+1 но я попробовал несколько комбо, но не могу добраться до него

1 ответ

Решение

Вместо того, чтобы пытаться указать следующую строку через диапазон адресов, попробуйте использовать N потянуть его в пространство шаблона перед d:

$ sed -e '/id="8"/{r file2.txt' -e 'N;d;}' file1.txt
rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx
Другие вопросы по тегам