Todos os utilitários que permitem a edição de arquivos no local fazem isso internamente gravando o resultado em um arquivo temporário e, em seguida, substituindo o arquivo original por esse arquivo temporário assim que a operação for concluída.
Arquivos podem ser modificados, mas você só poderá sobrescrever os dados existentes e / ou estender o tamanho do arquivo. Isso pode ser feito usando o utilitário dd
, por exemplo:
$ cat file.txt
hello world
abc abc 123 123
$ cat insert.txt
hello!
$ dd if=insert.txt of=file.txt bs=1 seek=6 conv=notrunc
7+0 records in
7+0 records out
7 bytes transferred in 0.000 secs (30918 bytes/sec)
$ cat file.txt
hello hello!
bc abc 123 123
Aqui, inserimos o que está em insert.txt
em file.txt
primeiro procurando 6 bytes no arquivo (passando por hello
e o espaço) e depois modificando-o. O conv=notrunc
impede que o arquivo de saída seja truncado no final da operação de gravação.
Se if=insert.txt
fosse omitido, seria possível inserir qualquer texto no teclado. Note que "inserir" é o termo errado aqui realmente. "Sobrescrever" pode descrever melhor o que está acontecendo (veja o primeiro caractere da segunda linha sendo sobrescrito pela nova linha no final de insert.txt
).
Você não desejaria editar um arquivo dessa forma.