Quando você tem um comando como este
sed -e ... "datafile" >"datafile"
Você terminará com um resultado de comprimento zero. A razão é que o shell configura stdin e stdout antes de executar o comando. Então, o stdout é enviado para o arquivo datafile
, criando ou truncando-o no processo, e só então a sed -e ... "datafile"
é executada.
Uma solução comum é algo assim
sed -e ... "datafile" >"datafile.tmp" && mv -f "datafile.tmp" "datafile"
Alguns comandos (incluindo versões de sed
) têm a opção editar no lugar :
sed -i.bak -e ... "datafile"
sed --in-place=.bak -e ... "datafile"