Der man
Seite macht mir nicht viel Hoffnung, aber ich hoffe, es handelt sich um ein undokumentiertes (und/oder GNU-spezifisches) Feature.
Akzeptierte Antwort:
Du kannst nicht. Verwenden Sie entweder ed oder GNU sed oder perl, oder tun Sie, was sie hinter den Kulissen tun, nämlich eine neue Datei für den Inhalt zu erstellen.
ed
, tragbar:
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
, Erstellen einer neuen Datei (empfohlen, denn wenn Ihr Skript unterbrochen wird, können Sie es einfach erneut ausführen):
cut -d , -f 1,3 <foo >foo.new &&
mv -f foo.new foo
cut
, ersetzt die Datei an Ort und Stelle (behält den Besitz und die Berechtigungen von foo
, braucht aber Schutz vor Unterbrechungen):
cp -f foo foo.old &&
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
Ich empfehle die Verwendung eines der cut
-basierte Methoden. Auf diese Weise sind Sie nicht auf ein nicht standardmäßiges Tool angewiesen, Sie können das beste Tool für den Job verwenden und das Verhalten bei Unterbrechungen steuern.