In-place-Bearbeitung mit grep
Ich habe ein Skript, das Aufrufe von grep Prozess einer text-Datei. Momentan mache ich so etwas.
$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp
$ mv myfile.txt.temp myfile.txt
Frage ich mich, ob es irgendeinen Weg gibt, zu tun, in-place-Bearbeitung, wie in den speichern die Ergebnisse zu den gleichen original-Datei ohne das erstellen einer temporären Datei und ersetzen Sie das original mit der temp-Datei, wenn die Verarbeitung erfolgt ist.
Natürlich begrüße ich Kommentare, warum dieses sollte oder sollte nicht getan werden, aber ich bin vor allem daran interessiert, ob es kann getan werden. In diesem Beispiel verwende ich grep
, aber ich bin interessiert über Unix-tools im Allgemeinen. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Perl hat die
-i
wechseln, so hatsed
undRuby
Aber beachten Sie, dass alles, was Sie jemals tut, ist die Schaffung von "temp" - Dateien im back-end, die Sie denken, dass Sie nicht sehen, das ist alles.
Andere Möglichkeiten, neben
grep
awk
bash
&&
statt;
? Diese noch explizit erstellen Sie eine temporäre Datei.Schwamm
(inmoreutils
Paket in Debian/Ubuntu) liest die Eingabe, bis EOF und schreibt Sie in die Datei, so können Sie grep Datei, und schreiben Sie es zurück zu sich selbst.Wie diese:
Im Allgemeinen, das kann nicht getan werden. Aber Perl hat die
-i
Schalter:Schreiben
-i.bak
verursachen, dass das original gespeichert werden soll, inmyfile.txt.bak
.(Natürlich intern, Perl-macht einfach im Grunde, was Sie bereits tut -- es gibt keine speziellen Magie zu tun hat.)
Nein, im Allgemeinen ist es nicht getan werden kann in Unix wie diese. Sie können nur erstellen/kürzen (mit >) oder Anhängen an eine Datei (mit >>). Einmal abgeschnitten ist, wird der alte Inhalt verloren gehen würde.
Bearbeiten Datei mit vim-Weise versuchen:
Nutzen Sie alternativ
sed
oderglotzen
.Speichern in einer variable, und weisen Sie die original-Datei:
>
redirect kürzt die input-Datei vor dercat
Befehl Lesen kann keine Eingabe.Werfen Sie einen Blick auf meine Folien zu "Field Guide Auf der Perl-Befehlszeile-Optionen" auf http://petdance.com/perl/command-line-options.pdf für mehr Ideen, was man tun kann, statt mit Perl.
Meisten Installationen von
sed
tun können in-place-Bearbeitung, Lesen Sie die Handbuchseite, möchten Sie wahrscheinlich die-i
Flagge.