Der Dateiinhalt ähnelt dem unten
abc.w.f.com
asdff.d.f.com
..........
Ich möchte alles nach dem Punkt entfernen und Änderungen sollten in derselben Datei überschrieben werden
abc
asdff
Habe es unten versucht, aber das erfordert eine Weiterleitung zu einer anderen Datei, was ich nicht will
sed "s/\..*//" Filename > File2
Antwort1
Verwenden -i
:
sed -i 's/\..*$//' Filename
-i[SUFFIX], --in-place[=SUFFIX]
Dateien direkt bearbeiten (erstellt eine Sicherungskopie, wenn SUFFIX angegeben ist)
Antwort2
Sie können nicht auf dieselbe Datei umleiten: Das offensichtliche Problem besteht darin, sed "s/\..*//" Filename > Filename
dass die Shell Filename
zum Schreiben geöffnet wird (und diese überschreibt), bevor die Datei von gelesen wird sed
.
Sie müssen die Ausgabe in eine andere Datei umleiten, die Originaldatei löschen und dann die neu erstellte Datei umbenennen, so wie das Original. Sed, Perl und AWK können das für Sie erledigen:
sed -i
perl -i
awk -i inplace
Alternativ können Sie Folgendes verwenden sponge
:
sed "s/\..*//" Filename | sponge Filename
sponge
puffert weiterhin, was es von der Standardeingabe empfängt, und schreibt es erst dann in Filename
.