Frage Suchen und Ersetzen durch Bash


Ich versuche, einen Text durch einen anderen Text in einer Konfigurationsdatei zu ersetzen. Ich habe ein Skript mit dem erstellt sed Befehl, aber ich bekomme einen Fehler.

Ursprüngliche Linie:

<property name="encryptData">false</property>

Neue Zeile:

<property name="encryptData">true</property>

Befehl:

sed -i -e 's/<property name="encryptData">false</property>/<property name="encryptData">true</property>/g' /Users/User/Desktop/mirth.cfg

Error:

sed: 1: "s/<property name="encry ...": bad flag in substitute command: '<'

0
2018-01-11 02:00


Ursprung


stackoverflow.com/a/1732454/2461638 - David Foerster


Antworten:


Der Befehl ist fast perfekt. Ihr Problem besteht darin, dass Sie dem Schrägstrich vorangehen müssen </property> mit einem Backslash\ so was.

sed -i -e 's/<property name="encryptData">false<\/property>/<property name="encryptData">true<\/property>/g' /Users/User/Desktop/mirth.cfg

Beobachtet habe ich es für beide Vorkommnisse getan.

Auf diese Weise weiß sed, dass dieser Schrägstrich Teil des Streams und nicht Teil des Befehls 's' ist.

Hoffe das behebt Ihr Problem.


5
2018-01-11 02:27



Das hat es geschafft! Ich habe mir die Haare ausgerissen, um zu entkommen. Ich habe es für alles außer dem / ausprobiert. Vielen Dank! - aswiftboobtotheface
@ user491764: Danke Torrien nicht! ;-) Wenn diese Antwort hilfreich war, klicke einfach auf das kleine Grau  unter der Nummer, die es jetzt in schönes Grün verwandelt. Das ist das beste Dankeschön, das du ihm geben kannst, wie es heißt, was bedeutet Ja, diese Antwort ist gültig! ;-) - Fabby
Ich habe es früher versucht. Ich habe noch nicht genug Reputation, um meine positive Stimme zu zeigen :( - aswiftboobtotheface
Nicht positiv. Wählen Sie es als die richtige Antwort. Ist Ihre Frage, Sie wählen die Antwort. - Torrien
Oh! Ich habe es gefunden! - aswiftboobtotheface


Wie das Muster, das Sie suchen, enthält /, ändere das Begrenzte für sed Ersatzbefehlssyntax. Zum Beispiel können Sie verwenden _ und verwenden Sie auch die Mustergruppierung, so dass Sie die Rückverweisung als Ersatz verwenden können:

sed -r 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg

Es ist auch immer eine gute Idee, eine Sicherungskopie während der Verwendung des -i Möglichkeit:

sed -ri.bak 's_(<property name="encryptData">)false(</property>)_\1true\2_' /Users/User/Desktop/mirth.cfg

Jetzt wird die Originaldatei beibehalten /Users/User/Desktop/mirth.cfg.bak und die modifizierte Datei wird sein /Users/User/Desktop/mirth.cfg.


2
2018-01-11 02:12



Danke für den Hinweis! Ich mache normalerweise eine Sicherung, aber es wird normalerweise manuell gemacht. - aswiftboobtotheface