Alles nach dem Punkt entfernen und in derselben Datei überschreiben

Alles nach dem Punkt entfernen und in derselben Datei überschreiben

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 > Filenamedass die Shell Filenamezum 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

spongepuffert weiterhin, was es von der Standardeingabe empfängt, und schreibt es erst dann in Filename.

verwandte Informationen