Ist das möglich? Ich habe irgendwo gelesen, dass der folgende Befehl es tun würde:
sed -e [Befehl] [Datei]
aber es schien dasselbe zu tun wie nur
sed [Befehl] [Datei]
(Änderungen wurden nicht gespeichert). Gibt es eine Möglichkeit, dies mit sed zu tun?
-e
Flagge steht für Ausdruck. Sie wollen wahrscheinlich die-i
Flagge, was bedeutet,in-place
und ich empfehle Ihnen dringend, zu verwendensed -i.bak 's/../' filename
Antworten:
Ich denke, Sie suchen nach
-i
:Beispielsweise:
Wenn Sie ein Suffix angeben, wird eine Sicherungsdatei erstellt:
Die Eingabedatei wird geändert und eine Sicherungskopie mit den ursprünglichen Dateidaten erstellt.
Beachten Sie auch, dass dies für GNU ist
sed
, es gibt geringfügige Unterschiede im Format zwischen den verschiedenensed
Implementierungen.quelle
sed
führt keine direkte Bearbeitung durch. Es erstellt eine neue Datei und überschreibt die alte, der Inode ändert sich.{ rm file; cmd > file; } < file
zu der Schlussfolgerung führen, dass cmd in dieselbe Datei liest und schreibt, was es nicht tut. Es sind zwei verschiedene Dateien, die zufällig den gleichen Namen haben. Aber ich möchte hier keine Diskussion anfangen.sed: 1: "foo.txt": invalid command code f
beim Laufensed -i 's/o/X/g' foo.txt
. Allerdingssed -i .bak 's/o/X/g' foo.txt
funktioniert das Bereitstellen einer Erweiterung, wie z. B.. Irgendwelche Ideen, wie man es zum Laufen bringt, ohne Sicherungsdateien zu erstellen?sed -i '' 's/o/X/g' foo.txt
Diese Lösung funktioniert für HPUX (UNIX):
1
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
.:2.
perl -pi -e 's/Error/NO_Error/g' test1.sh
3.
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
quelle
-e
Diese Option dient zum Ausführen mehrerersed
Befehlebetrachten
file.txt
alsdann ist O / P
-i
Option speichert Änderungen dauerhaft ...quelle