Antworten:
Ich denke, Sie suchen nach -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Beispielsweise:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Wenn Sie ein Suffix angeben, wird eine Sicherungsdatei erstellt:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
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 verschiedenen sed
Implementierungen.
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 Laufen sed -i 's/o/X/g' foo.txt
. Allerdings sed -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
-e
Diese Option dient zum Ausführen mehrerer sed
Befehle
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
betrachten file.txt
als
linux os
dann ist O / P
unix os
-i
Option speichert Änderungen dauerhaft ...
-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