Да. Я пришел к такому выводу для себя по причинам, описанным в этом ответе .
Вы должны добавить второе условие - удалять только в том случае, если не последняя строка, а в последней строке используйте a
ppend вместо замены удаления строка после, если она соответствует, например,
sed -E '/foo|bar/{$!d
}
${a\
foo\
bar
//d
}' infile
( sed -e '/foo/d' -e '/bar/d' data.in; cat <<END
foo
bar
END
) >data.out
Удалите ненужные строки с помощью sed
, затем просто добавьте нужные конечные строки с помощью cat
и выведите в новый файл.
В качестве альтернативы можно использовать printf
вместо cat
:
( sed -e '/foo/d' -e '/bar/d' data.in; printf 'foo\nbar\n' ) >data.out
Или, в два этапа,
sed -e '/foo/d' -e '/bar/d' data.in >data.out
printf 'foo\nbar\n' >>data.out
Это дает преимущество в виде ясности и простоты обслуживания.