Das Verhalten von >
wird in dieser Antwort von Unix & Linux SE erläutert . Das Beispiel gibt es cat test.txt > test.txt
und die Erklärung ist:
Das erste, was passiert, ist das Öffnen von bash
test.txt
, wodurch die Datei abgeschnitten wird. Es ist jetzt leer, bevorcat
mittest.txt
als Argument ausgeführt wird.
Ihr sed '…' file.xml > file.xml
löst das gleiche Verhalten aus.
Ganz einfache Lösung mit einem einzigen sed
:
sed -i 's/<active>true/<active>DUMMY/g s/<active>false/<active>true/g s/<active>DUMMY/<active>false/g' file.xml
Die -i
Option löst Ihr Problem mit der abgeschnittenen Datei. Der Befehl wechselt <active>true
in <active>false
und umgekehrt. Beachten Sie, dass Sie nicht nur verwenden können
s/<active>true/<active>false/g;s/<active>false/<active>true/g
weil der zweite Teil nicht erkennen kann, ob false
es sich um das Original false
oder um das Original handelt, das true
gerade in umgewandelt wurde false
. Dies führt dazu, dass jedes Matching true
oder false
Ending als true
. Aus diesem Grund habe ich den temporären DUMMY
Ersatz verwendet. Vielleicht gibt es einen besseren Weg, ich weiß es noch nicht.
Die einzige Bedingung ist, dass die Zeichenfolge <active>DUMMY
nicht in der Originaldatei angezeigt werden kann. Wenn es angezeigt wird, verwenden Sie einen anderen Dummy-String, der nicht sicher erscheint.