bloodyrulz
Goto Top

SED Sonderzeichen maskieren klappt nicht.

Hallo zusammen,

ich hoffe Ihr könnt mir helfen.
System: Windows

Folgendes Problem:
Ich habe eine Konfigdatei von einem Router.
Diese enthalten die Zeichen <> z.B so: <Targethost1> 172.18.XX.YY </Targethost1>

Mein Ziel ist es. die 172.18.XX.YY mit einer IP z.B. 172.18.25.60 zu ersetzen. Leider kann ich nicht einfach die IP ersetzen da es 4 Targethosts 1-4 gibt und in jeder muss eine andere 172er Adresse stehen. Daher muss ich mit Targethost1> Targethost2> usw. suchen und ersetzen.

Ausschnitt aus meinem Versuch.
set th1= 172.18.XX.YY
set pingcheck1=172.18.25.60
sed -e "s/\<Targethost1\> *%th1%/\<Targethost1\> %pingcheck1% /" quell_datei.epr > Output.epr  

sobald ich die <> in der Quelldatei zu Testzwecken entferne, funktioniert es wunderbar.

Würde mich über Hilfe sehr freuen.

Danke

Gruß
Andreas

Content-ID: 257055

Url: https://administrator.de/forum/sed-sonderzeichen-maskieren-klappt-nicht-257055.html

Ausgedruckt am: 05.04.2025 um 18:04 Uhr

114757
114757 08.12.2014 aktualisiert um 16:43:56 Uhr
Goto Top
Moin Andreas,
benutze das ^ Zeichen um Sonderzeichen zu maskieren, also z.B.
^>
Gruß jodel32
BloodyRulz
BloodyRulz 08.12.2014 aktualisiert um 16:58:02 Uhr
Goto Top
Vielen Dank für die schnelle Antwort,

ich habe es auf die schnelle mal probiert, leider hat sich die IP nicht ersetzt. (ohne Fehlermeldung)

Ich werde das gleich morgen nochmal genau testen und probieren.

Muss ich das dann in der ganzen sed Zeile abändern obwol die anderen "Ersetzungen" super funktionieren?

sed -e "s/DS100/%ds100%/; s/ART STANDORTNAME/%artstandort%/; s/ZZ.FF/%zo%.%do%/; s/ZZ.0./%zo%.0./; s/.HH/.4/; s/\$Revision: /Revision:/; s/ *\$ */  /; s/^<Targethost1^> *%th1%/^<Targethost1^> %pingcheck1% /" %quell_datei% > %ds100%_%artstandort%_RFU1.epr  

Danke für deine schnelle Hilfe.

Gruß
Andreas
Gersen
Gersen 08.12.2014, aktualisiert am 09.12.2014 um 00:53:02 Uhr
Goto Top
Hallo,

vielleicht habe ich einen Denkfehler, aber die Zeichen "<>" müssen in sed nicht escaped werden, oder?

Ein
sed -e "s/<Targethost1>%th1%/<Targethost1> %pingcheck%/"
tut es -hier zumindest- wunderbar. Wichtig ist, dass bei Deiner Zuweisung der Variablen "th1" in Windows die Variable ein führendes Leerzeichen hat (" 172.18.XX.YY") - das muss im SED-Befehl beachtet werden (wenn es so beabsichtigt ist).

Gruß,
Gersen
colinardo
Lösung colinardo 08.12.2014, aktualisiert am 09.12.2014 um 08:13:01 Uhr
Goto Top
Hallo Andreas,
das hier macht bei mir das gewünschte
@echo off
set pingcheck1=172.18.25.60
sed -e "s/\(<Targethost1>\).*\(<\/TargetHost1>\)/\1%pingcheck1%\2/i" quell_datei.epr >Output.epr  
Grüße Uwe
BloodyRulz
BloodyRulz 09.12.2014 um 08:12:39 Uhr
Goto Top
Vielen Dank an alle,

die Lösung von colinardo hat den gewünschten Erfolg gebracht.

Vielen Dank

Gruß
Andreas

(closed)