Hallo zusammen, nach stundenlangem suchen frage ich mal hier: Ich möchte in einer Datei die Zeichen "> durch "/> ersetzen. Maskieren mit Backslashen hat nicht funktioniert. also: sed 's/\"\>/\"\/\>/' -i export.txt Wie ist es richtig ? Danke Gruß
Sed doppelte Anführungszeichen ersetzen
Anmeldungsdatum: Beiträge: 51 |
|
||||||
![]() Anmeldungsdatum: Beiträge: 4174 Wohnort: Göttingen |
Du könntest am einfachsten ein anderes Trennzeichen für sed verwenden, z.B. das Doppelkreuz: sed -i 's#">#"/>#' export.txt |
||||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 51 |
Ok, danke, hat funktioniert |
||||||
![]() Anmeldungsdatum: Beiträge: 17410 Wohnort: Berlin |
Anführungsstriche haben für sed keine Sonderbedeutung - die brauchst Du nur, um der Bash zu sagen, dass sie sich von Sonderzeichen in dem Sed-Ausdruck, wie Semikon oder & nicht beeindrucken lassen soll, einerseits, und wenn Leerzeichen im Ausdruck sind, um diese zu maskieren, und Sed einen zusammhängenden String als eine Zeichenkette zu übergeben, andererseits. Hier sind keine Leerzeichen oder Tabs, die die bash überhaupt auf die Idee bringen könnte, dass das mehr als eine Zeichenkette sein könnte. Aber das Anführungszeicen sieht für die Bash aus, als wolltest Du etwas maskieren und nicht wie ein Zeichen, das roh wie es ist an Sed zu übergeben ist. Und - richtig gemacht, der Slash wird von Sed als Anfang/Ende des Ausdrucks gewertet, wenn nicht maskiert. Und besonders richtig von Doc_Symbiosis, mit einem anderen Trenner macht man sich das Leben leichter. Prinzipiell ginge es aber auch so:
Das Größerzeichen ist bei Dir durch einfache Apostrophe bereits maskiert und muss für die Bash nicht weiter maskiert werden, um nicht als Umlenkungsoperator aufgefasst zu werden. Analoges gilt für die doppelten Anführungszeichen. Allerdings wird ein überflüssiger Backslash von den meisten Programmen gutmütig ignoriert. Daher funktioniert der von Dir gezeigte Code auch:
Was funktioniert damit denn nicht? Bei mir geht's. Kein GNU-sed? Kein Linux? |
||||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 51 |
System ist Ubuntu 20. Problem ist folgendes: Ich möchte in einer Datei die Zeichen "> durch die Zeichen "/> ersetzen. Wenn ich das mit den Backslashen mache passiert nichts. sed 's/\"\>/\"\/\>/' obwohl es ja faktisch richtig ist. Hingegen hat die Lösung sed 's#">#"/>#' funktioniert. Warum auch immer. |
||||||
![]() Anmeldungsdatum: Beiträge: 17410 Wohnort: Berlin |
Ja, sorry, mein Beispiel war falsch, hier korrigiert ohne Ersetzung des Sed-Trennzeichens / sondern mit Backslashmaskierung:
In einfachen Anführungsstrichen müssen doppelte nicht maskiert werden und das Größerzeichen auch nicht. Nur der Slash, der ansonsten das Ende des Ersetzungsausdrucks markieren würde, muss vor der Interpretation durch Sed geschützt werden. Was gibt denn das Kommando (Zeile 1) bei Dir aus? Bei mir Zeile 2. |
||||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 51 |
ja, danke, so gehts. gleiches Ergebnis |