dnis822
Goto Top

Teil eines Strings löschen

Hallo zusammen,

ich komme gerade bei folgendem Punkt nicht weiter:
Ich habe eine Datei die völlig unformatiert ist, das bedeutet es steht alles in einer Zeile:

<Url>Das/ist/meine/Url</Url><!--Comment <Url2>Das/ist/meine/Url2</Url2> Comment-->

Ich möchte jetzt mit Hilfe eines Batch-Scriptes Url2 wieder einkommentieren, das bedeutet
"<!--Comment" und "Comment-->" sollen gelöscht werden.

Ist das Möglich?

Gruß

Content-Key: 283898

Url: https://administrator.de/contentid/283898

Printed on: April 19, 2024 at 06:04 o'clock

Mitglied: 117471
117471 Sep 25, 2015 at 14:07:25 (UTC)
Goto Top
In der Unix-Welt gibt es einen "sed", einen Windows-Port findet man offenbar hier: http://gnuwin32.sourceforge.net/packages/sed.htm

Man könnte z.B. die Zeichenketten "<!--Comment " und " Comment-->" (inklusive der Leerzeichen dahinter bzw. davor) durch "nichts" ersetzen face-smile
Member: Dnis822
Dnis822 Sep 25, 2015 at 14:14:08 (UTC)
Goto Top
Hallo!
Vielen Dank für die schnelle Rückmeldung.

Es muss allerdings rein in einem Batch-Script passieren.
Könntest du mir vielleicht mit der suchen und ersetzen syntax auf die Sprünge helfen?

Gruß
Mitglied: 117471
117471 Sep 25, 2015 updated at 15:18:02 (UTC)
Goto Top
Ich sehe gerade, es geht noch einfacher:

der Befehl

sed s/xyz/abc/g beispiel.txt

ersetzt in der Datei beispiel.txt alle xyz durch abc und schreibt das auf die (umleitbare) Standard-Ausgabe.

Du müsstest also nur sed installieren, den Ordner zur Binärdatei (C:\Program Files (x86)\GnuWin32\bin) in den Suchpfad aufnehmen und kannst dann direkt aus der Quelldatei lesen und in eine Zieldatei umleiten.
Mitglied: 122990
122990 Sep 25, 2015, updated at Sep 26, 2015 at 09:40:36 (UTC)
Goto Top
Eine XML durch Batch jagen, wuahhhhh da kriegt man ja Gänsehaut bei den ganzen Batch-Sonderzeichen face-big-smile
 sed -r 's/<!--Comment|Comment-->//gi' datei.txt
Achtung im ersten Element wird mit Regular Expressions gearbeitet ! Spezielle Sonderzeichen sind mit Backslash zu escapen.
SED for Windows, download hier einfach nur die sed.exe aus dem BIN-Verzeichnis nehmen, fertig.

Gruß grexit
Member: Endoro
Endoro Sep 26, 2015 updated at 02:47:41 (UTC)
Goto Top
Hey,
in Batch sind verschiedene Zeichenkettenmanipulationen möglich, u.a. die Kürzung am Anfang (siehe set /?). Zu beachten ist, dass die maximale Zeichenkettenlänge nicht überschritten wird. Außerdem kann Batch nicht mit Zweibytecodes (UTF-8 usw.) arbeiten. Sed übrigens auch nicht.
Gruß, Endoro
Mitglied: 122990
122990 Sep 26, 2015 updated at 06:42:49 (UTC)
Goto Top
Außerdem kann Batch nicht mit Zweibytecodes (UTF-8 usw.) arbeiten. Sed übrigens auch nicht.
SED kann das schon nur muss man den Befehl dann in ein UTF-8 encodiertes Script packen oder die Shell auf UTF-8 umstellen (Linux) und ausführen dann geht das schon.

Aber ich shätze mal der TO ist da hinsichtlich anderer Tools und Erweiterung Beratungsresistent, so wie seine letzten Threads aussehen.
Unter Windows würde ich dafür immer Powershell vorziehen, das hat mit dem Encoding etc. keine solchen Probleme.

Gruß grexit
Mitglied: 117471
117471 Sep 26, 2015 at 07:56:37 (UTC)
Goto Top
Ja, genau das hatte ich ja bereits geschrieben?!?

Wobei: Ich meine gelesen zu haben, dass man < und > beim Windows-Port in Tüddelchen packen muss und die von mir aufgezeigte Syntax zum Aufruf ist tatsächlich korrekt.

Ich hatte das Ding nämlich probeweise installiert und bei der Gelegenheit mal ein paar hundert Kommentarzeilen aus einer Batch geschnippelt face-smile
Mitglied: 122990
122990 Sep 26, 2015 updated at 09:44:24 (UTC)
Goto Top
Zitat von @117471:

Ja, genau das hatte ich ja bereits geschrieben?!?
Jup , aber nicht erwähnt das hier das erste Element als Regular Expression String interpretiert wird. Für einen Anfänger wie der TO es zu sein scheint nicht ganz unwichtig., sonst wundert er sich wenn er mal einen Punkt ersetzen möchte warum plötzlich alle Zeichen ersetzt werden face-wink

Gruß und schönes Wochenende
Member: Endoro
Endoro Sep 26, 2015 at 11:07:22 (UTC)
Goto Top
Hey,
sed unter cmd verarbeitet kein UTF-8. Egal was man da einstellt.
Gruß, Endoro
Member: Dani
Dani Sep 26, 2015 updated at 11:15:03 (UTC)
Goto Top
Moin,
Zitat von @122990:

Unter Windows würde ich dafür immer Powershell vorziehen, das hat mit dem Encoding etc. keine solchen Probleme.
Sehe ich genauso. Ist Powershell keine Option? Laienhaft gesagt ist Powershell Batch 2.0. ^^

Gruß,
Dani
Mitglied: 117471
117471 Sep 26, 2015 updated at 11:20:49 (UTC)
Goto Top
Zitat von @Dani:

Sehe ich genauso. Ist Powershell keine Option? Laienhaft gesagt ist Powershell Batch 2.0. ^^

Das ist tatsächlich eine interessante Frage. Ich tüddel' seit MS-DOS 3.2 mit Batch-Dateien herum und mache immer noch alles "per Batch". Mein aktueller HiScore von dieser Woche war ein knapp 500 Zeilen langes Backup-Script und mit der PowerShell wäre das natürlich 1000 Mal einfacher gewesen.

Ich denke, es liegt daran, dass sich die PowerShell (noch) nicht so nachhaltig anfühlt wie Batch-Dateien. Bei denen hat man irgendwie immer das Gefühl, dass es die noch in 30 Jahren geben wird... face-smile
Member: Dnis822
Dnis822 Sep 27, 2015 at 15:46:50 (UTC)
Goto Top
Hallo und vielen Dank für die ganzen Rückmeldungen.

Ich komme leider jetzt erst wieder dazu, dem weiter nachzugehen.
Ja leider bin ich darauf angewiesen das in einem Batch-Script zu realisieren.
Member: Dnis822
Dnis822 Sep 27, 2015 at 16:53:28 (UTC)
Goto Top
Das ersetzen funktioniert nun,
nur Probleme habe ich mit dem hier : "<!--"

Ich habe versucht es so zu escapen ^<!-- und so ^<^!-- leider funktioniert das beides nicht.
Muss ich das anders escapen?
Mitglied: 117471
117471 Sep 27, 2015 at 17:25:45 (UTC)
Goto Top
Zitat von @Dnis822:

Muss ich das anders escapen?

Mein Tipp vom 26. 09:56 Uhr hat nicht geklappt? Ich bin mir ziemlich sicher, dass das genau so in der Anleitung stand...
Member: Dnis822
Dnis822 Sep 28, 2015 at 06:55:04 (UTC)
Goto Top
Guten Morgen!

Ich habe es so probiert:

^"<"!--
oder
"^<"!--

das funktioniert leider nicht,
kann mir hier noch jemand auf die Sprünge helfen ?
Member: Dnis822
Dnis822 Sep 28, 2015 at 06:57:46 (UTC)
Goto Top
Nur das "<" zu ersetzen funktioniert, dafür brauch es auch keine Anführungszeichen:

Also so geht es ^<, aber wenn ich jetzt noch nach genau <!--Comment (mit ^<!--Comment) suche funktioniert es nicht.
Alle versuche evtl. das ! noch zu escapen (mit ^<^!--Comment) gelingen leider auch nicht.
Gruß
Member: Dnis822
Dnis822 Sep 28, 2015 at 07:25:19 (UTC)
Goto Top
Okay ich habe es.

So muss es aussehen: "^<^^!--Comment"

Kann damit geschlossen werden.
Gruß
Mitglied: 117471
117471 Sep 28, 2015 at 07:31:24 (UTC)
Goto Top
Das kannst Du selber machen: "Frage als gelöst markieren" und "Zur Lösung beigetragen" anklicken.