sed zerstört Zeichenkodierung

23/11/2011 - 14:47 von Friedemann Stoyan | Report spam
Hallo NG,

ich habe hier folgendes Shellscript:

#!/bin/bash

if [ -x /usr/sbin/openvpn ]; then
SID=$(/usr/sbin/openvpn --show-pkcs11-ids /usr/lib/opensc-pkcs11.so | grep "Serialized id:")
SID=${SID##*\ }
if [ -n ${SID} ]; then
echo ${SID}
sed -i -e"s|^pkcs11-id\ .*|pkcs11-id\ '${SID}'|" /etc/openvpn/pkcs.conf
fi
fi

exit 0

Hintergrund:

Das Script holt sich von einem Cryptotoken die Serial-ID eines Zertifikates
und schreibt diese in eine OpenVPN-Konfiguration. Die ID sieht so aus:

EnterSafe/PKCS\x2315/29573315102301/key001\x20\x28User\x20PIN\x29/C806EA144E730FB3FBA2D27DA75D6E0CC445BB

In der OpenVPN Konfig kommt dagegen an:

EnterSafe/PKCS#15/29573315102301/key001 (User PIN)/C806EA144E730FB3FBA2D27DA75D6E0CC445BB

sed scheint z.B \x23 in # zu konvertieren. Leerzeichen und Klammern ebenso.
Wie stelle ich das ab?

mfg Friedemann
 

Lesen sie die antworten

#1 Joerg Weilbier
24/11/2011 - 12:08 | Warnen spam
Am 23.11.2011 14:47, Friedemann Stoyan wrote:
Hallo NG,


...
sed -i -e"s|^pkcs11-id\ .*|pkcs11-id\ '${SID}'|" /etc/openvpn/pkcs.conf



...
EnterSafe/PKCS\x2315/29573315102301/key001\x20\x28User\x20PIN\x29/C806EA144E730FB3FBA2D27DA75D6E0CC445BB

In der OpenVPN Konfig kommt dagegen an:

EnterSafe/PKCS#15/29573315102301/key001 (User PIN)/C806EA144E730FB3FBA2D27DA75D6E0CC445BB

sed scheint z.B \x23 in # zu konvertieren. Leerzeichen und Klammern ebenso.



Ich kann erstmal nicht helfen, konnte es aber bei mir auch nachvollziehen (cygwin, GNU sed version 4.2.1)

Kurzform:

$ echo "etwas" | sed -e s/"etwas"/"\x23"/
#


Die Optionen --posix und --regexp-extended brachten auch keine Verhaltensànderung.
(Habe auch keinen alias auf sed mit default-Optionen.)

Es sieht wirklich so aus, als ob sed sich nicht dazu bringen làsst, \x23 in # zu verwandeln.

Bei echo ist es default abgestellt, kann aber angestellt werden:
$ echo "\x23" ; echo -e "\x23"
\x23
#


ansonsten habe ich in
<http://www.gnu.org/software/sed/man...s.html>
leider gefunden:

In addition, this version of sed supports several escape characters (some of which are multi-character)
to insert non-printable characters in scripts (\a, \c, \d, \o, , \t, \v, \x).
These can cause similar problems with scripts written for other seds.

:-(

Joerg

Ähnliche fragen