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

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

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

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
id="8" efwef
aaaaaaaaaaaaaaaaaaa
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

file2.txt

123

123

то, в чем я нуждаюсь:

rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx

объясненный: найдите, что шаблон (идентификатор = "8") удаляет строку шаблона +1, вставляют в содержание file1.txt file2.txt

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

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

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

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

0
задан 7 October 2018 в 14:01

1 ответ

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

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

123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx
0
ответ дан 27 October 2019 в 08:45

Другие вопросы по тегам:

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