A interrupção do sed corrompe o arquivo de destino?

1

Se eu interromper sed (editor de fluxo), há alguma chance de corromper o arquivo de destino?

Exemplo : Se eu executar o comando sed -i -- 's/foo/bar/g' file.txt e eliminá-lo antes de terminar, há alguma chance de que a string foo seja substituída por algum texto diferente de bar ou mesmo corrompendo o arquivo de destino?

O que eu esperaria é que, se eu matar antes que o manipulador de arquivos seja liberado , haverá uma chance de substituição não concluída no arquivo. No entanto, tenho a sensação de que sed é robust para tais eventos, usando algum tipo de arquivo intermediário antes de modificar o destino . Mas não encontrei detalhes na documentação.

    
por rkioji 22.11.2016 / 07:31

1 resposta

3

Do manual do sed ...

link

When the end of the file is reached, the temporary file is renamed to the output file's original name.

-i[SUFFIX]
--in-place[=SUFFIX]
This option specifies that files are to be edited in-place. GNU sed does this by creating a temporary file and sending output to this file rather than to the standard output.1.
This option implies -s.

When the end of the file is reached, the temporary file is renamed to the output file's original name. The extension, if supplied, is used to modify the name of the old file before renaming the temporary file, thereby making a backup copy2).

This rule is followed: if the extension doesn't contain a *, then it is appended to the end of the current filename as a suffix; if the extension does contain one or more * characters, then each asterisk is replaced with the current filename. This allows you to add a prefix to the backup file, instead of (or in addition to) a suffix, or even to place backup copies of the original files into another directory (provided the directory already exists).

If no extension is supplied, the original file is overwritten without making a backup. 
    
por 22.11.2016 / 07:39

Tags