POSIX não exige sed -i
porque é redundante e também não está alinhado com o propósito original de sed
. sed
foi originalmente criado para editar streams (daí seu nome s
tream ed
itor), não arquivos. A ferramenta correta no POSIX para editar arquivos de forma não interativa é ed
printf "/text/d\nw" | ed file.txt
Infelizmente, muitos sistemas atuais acham que
ed
é obsoleto e não o fornece por padrão, mesmo que seja obrigatório pelo POSIX ... Mas pelo menos ele deve ser facilmente instalado na maioria dos sistemas (ao contrário do GNU sed, que pode exigir a compilação do código-fonte).
EDIT: Além disso, ao contrário do que o texto da pergunta implica, o comando d
de (s)ed
faz mais do que deletar a string dada, ele apaga qualquer linha que a contenha. / p>