Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Sed s met speciale karakters.  (gelezen 859 keer)

Offline Kurt DM

  • Lid
Sed s met speciale karakters.
« Gepost op: 2014/10/28, 13:52:41 »
Ik probeer al een tijdje het volgende probleem op te lossen met sed. Ik probeer automatisch mails te verzenden met behulp van een template waarin als eerste lijn het volgende voorkomt:
<HTML><BODY>Geachte Titel&#44;

Wanneer ik sed gebruik in een command window werkt alles als volgt:
onbekende=pol
echo "<HTML><BODY>Geachte Titel&#44;" | sed "s/Titel/$onb/" geeft zoals gehoopt
<HTML><BODY>Geachte Pol&#44;

Wanneer ik dit zelfde trucje probeer in een bash file krijg ik volgende sed fout (in DeTitel zit bv. de waarde Pol):

lijn in de bash file: cat template.html | sed "s/Titel/$DeTitel/" > demail.html
de foutmelding: sed: expressie #1, teken 16: onbekende optie bij 's'-opdracht.

Het is duidelijk dat sed hier tilt slaat op het & karakter. Raar dat het wel werkt in een command window.
Bestaat er een soort escape sekwentie waarmee ik & of eventueel &#44; zou kunnen inpakken om dit te doen werken?

PS; de "rare" karakters &#44; zijn de voorstelling van een komma in HTML. Ik wil namelijk met het thunderbird -compose commando een mail aanmaken en de tekst moet blijkbaar in HTML.



Re: Sed s met speciale karakters.
« Reactie #1 Gepost op: 2014/10/28, 14:36:35 »
Misschien al lang getest, maar heb je een backslash geprobeerd?

Offline Kurt DM

  • Lid
Re: Sed s met speciale karakters.
« Reactie #2 Gepost op: 2014/10/28, 16:01:38 »
FreeTheBee, waar probeer ik best die backslash te zetten?

Offline Moob

  • Lid
Re: Sed s met speciale karakters.
« Reactie #3 Gepost op: 2014/10/28, 21:11:59 »
Ik heb het even getest op ubuntu 14.04 en daar gaat het goed, geen sed foutmelding.

#!/bin/bash

ti=Pol
cat template.html | sed "s/Titel/$ti/"

Offline Kurt DM

  • Lid
Re: Sed s met speciale karakters.
« Reactie #4 Gepost op: 2014/10/29, 15:36:55 »
Inderdaad, bedankt Moob, dit werkt nu ook hier. Wat ik verkeerd gedaan had ... kan ik niet meer achterhalen. Nu ga ik eventueel nog proberen om dingen zoals het vervangen van "Titel" in het template door "Mevr./Mr." automatisch in een script met zenity te laten werken. Het werkt uiteraard als ik als input in een zenity window"Mevr.\/Mr." meegeef maar eens kijken of dat niet vrij makkelijk kan geautomatiseerd worden zonder dat de gebruiker zelf een escape character moet meegeven.

Offline Kurt DM

  • Lid
Re: Sed s met speciale karakters.
« Reactie #5 Gepost op: 2014/10/29, 16:22:13 »
Ondertussen de oplossing gevonden:

#Maakt van Mevr./Mr. ----> Mevr.\/Mr.
DeTitel=$(echo $DeTitel | sed s"_\/_\\\/_")

Re: Sed s met speciale karakters.
« Reactie #6 Gepost op: 2014/10/30, 08:53:04 »
Je kan ook de ingebouwde functies van bash gebruiken om een search-and-replace te doen, hoef je niet met escape codes te werken

Text=${Text/A/$B} # vervangt eerste voorkomen van A met inhoud van $B
Text=${Text//A/$B} # vervangt alle voorkomens van A met inhoud van $B
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Kurt DM

  • Lid
Re: Sed s met speciale karakters.
« Reactie #7 Gepost op: 2014/10/30, 11:38:59 »
Dat klopt:

a="geachte mevr./mr."
a=${a/"mevr./mr."/heer} wordt geachte heer.
Dit is inderdaad veel leesbaarder en eenvoudiger.