L'man
ne me donne pas beaucoup d'espoir, mais j'espère qu'il s'agit d'une fonctionnalité non documentée (et/ou spécifique à GNU).
Réponse acceptée :
Vous ne pouvez pas. Utilisez ed ou GNU sed ou perl, ou faites ce qu'ils font en coulisses, c'est-à-dire créer un nouveau fichier pour le contenu.
ed
, portatif :
ed foo <<EOF
1,$s/^([^,]*),([^,]*),([^,]*).*/1,3/
w
q
EOF
GNU sed
:
sed -i -e 's/^([^,]*),([^,]*),([^,]*).*/1,3/' foo
Perl :
perl -i -l -F, -pae 'print @F[1,3]' foo
cut
, en créant un nouveau fichier (recommandé, car si votre script est interrompu, vous pouvez simplement le relancer) :
cut -d , -f 1,3 <foo >foo.new &&
mv -f foo.new foo
cut
, remplaçant le fichier en place (conserve la propriété et les autorisations de foo
, mais nécessite une protection contre les interruptions) :
cp -f foo foo.old &&
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
Je recommande d'utiliser l'un des cut
méthodes basées. De cette façon, vous ne dépendez d'aucun outil non standard, vous pouvez utiliser le meilleur outil pour le travail et vous contrôlez le comportement en cas d'interruption.