Wie kann ich mit meinem sed-Befehl dauerhafte Änderungen an einer Datei vornehmen?

Wie kann ich mit meinem sed-Befehl dauerhafte Änderungen an einer Datei vornehmen?

Ist das möglich? Ich habe irgendwo gelesen, dass der folgende Befehl das tun würde:

sed -e [Befehl] [Datei]

aber es schien das gleiche zu bewirken wie nur

sed [Befehl] [Datei]

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

Antwort1

Ich glaube, Sie suchen -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 Sicherungskopie mit den ursprünglichen Dateidaten erstellt.

Beachten Sie auch, dass dies für GNU ist sed, es gibtleichte Unterschiedeim Format zwischen verschiedenen sedImplementierungen.

Antwort2

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

Antwort3

-eOption ist für die Ausführung mehrerer sedBefehle

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

betrachten file.txtals

linux os

dann ist O/P

unix os

-iOption speichert Änderungen dauerhaft …

verwandte Informationen