Você não pode. Use ed ou GNU sed ou perl, ou faça o que eles fazem nos bastidores, que é criar um novo arquivo para o conteúdo.
ed
, portável:
ed foo <<EOF
1,$s/^\([^,]*\),\([^,]*\),\([^,]*\).*/,/
w
q
EOF
GNU sed
:
sed -i -e 's/^\([^,]*\),\([^,]*\),\([^,]*\).*/,/' foo
Perl:
perl -i -l -F, -pae 'print @F[1,3]' foo
cut
, criando um novo arquivo (recomendado, porque se seu script for interrompido, você pode simplesmente executá-lo novamente):
mv foo foo.old
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
cut
, substituindo o arquivo em vigor (mantém a propriedade e as permissões de foo
, mas precisa de proteção contra interrupções):
cp foo foo.old &&
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
Eu recomendo usar um dos métodos cut
-based. Dessa forma, você não depende de nenhuma ferramenta não padrão, pode usar a melhor ferramenta para o trabalho e controla o comportamento na interrupção.