Quando você executa > /tmp/foo.txt
, sobrescreve os conteúdos de /tmp/foo.txt
com a saída de sed 's/old text/new text/' file1.txt
. Como /tmp/foo.txt
não existe quando você executa este comando, o bash criará esse arquivo para você e então o escreverá.
Em seguida, quando você usar o -p
flag para cp
, estará copiando as permissões e os atributos de /tmp/foo.txt
para file1.txt
e sobrescrevendo-o no processo.
Em vez disso, o que você quer fazer é sobrescrever o conteúdo de file1.txt
com o conteúdo de /tmp/foo.txt
, o que deve soar familiar. Executar
sed 's/old text/new text/' file1.txt > /tmp/foo.txt
cat /tmp/foo.txt > file1.txt
Observe que isso não copia nenhuma permissão ou atributo de file1.txt
para /tmp/foo.txt
ou vice-versa - você está mantendo os metadados existentes para file1.txt
, mas modificando o conteúdo.
Nesta instância específica, você também pode usar apenas sed -i
como sugerido pelo pbm.