Как 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