sed -i
usa os arquivos temporários como um detalhe de implementação, que é o que você está experimentando; no entanto, a inclusão de dados no início de um fluxo de dados sem sobrescrever o conteúdo existente requer a regravação do arquivo. Não há como contornar isso, mesmo evitando sed -i
.
Se reescrever o arquivo não for uma opção, você pode considerar manipulá-lo quando for lido, por exemplo:
{ echo some prepended text ; cat file ; } | command
Além disso, o sed é para edição de fluxos - um arquivo não é um fluxo. Use um programa destinado a esse propósito, como ed ou ex. A opção -i
para o sed não é apenas não portável, ele também irá quebrar quaisquer links simbólicos para o seu arquivo, uma vez que essencialmente o exclui e recria, o que é inútil.
Você pode fazer isso em um único comando com ed
da seguinte forma:
ed -s file << 'EOF'
0a
prepend these lines
to the beginning
.
$a
append these lines
to the end
.
w
EOF
Note que, dependendo da sua implementação, ele pode usar um arquivo de paginação, exigindo que você tenha pelo menos esse espaço disponível.