it-swarm.com.de

Wie kann ich meinen sed-Befehl dazu bringen, dauerhafte Änderungen an einer Datei vorzunehmen?

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 gerade

sed [Befehl] [Datei]

(Die Änderungen wurden nicht gespeichert.) Gibt es eine Möglichkeit, dies mit sed zu tun?

33
John

Ich denke du suchst -i:

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Zum Beispiel:

$ 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 Sicherung mit den ursprünglichen Dateidaten erstellt.

Beachten Sie auch, dass dies für GNU sed gilt, es gibt geringfügige Unterschiede im Format zwischen verschiedenen sed Implementierungen.

51
terdon

Diese Lösung funktioniert unter 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

2
user3114790

Die Option -e Dient zum Ausführen mehrerer sed -Befehle

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

betrachten Sie file.txt als

linux os

dann ist O/P.

unix os

Die Option -i Speichert Änderungen dauerhaft ...

1
user195318