Я полагаю, что я достаточно близок, но существует 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
но я попробовал несколько комбинаций, но не могу добраться до него
Вместо того, чтобы пытаться указать следующую строку через диапазон адресов, попытайтесь использовать N
вытягивать его в пространство шаблона перед d
:
$ sed -e '/id="8"/{r file2.txt' -e 'N;d;}' file1.txt
rrrrrrrrrrrrrrrrr
dddddddddddddddddd
123
123
cccccccccccccccccccc
xxxxxxxxxxxxxxxxxxxxx