staging.inyokaproject.org

Hochkomma ausfiltern

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

gnude

Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

Hallo, ich habe ein Shellscript in dem ich eine Variable Verarbeite. Die Variable ist ein Text, also ein STring. Nun kann es sein das darin ein Anführungszeichen ist und dann gibt es mit der Variable imn späteren Verlauf Probleme. Daher .... wie kann ich dieses Zeichen: " in einem Shellstring herausfiltern ???

greenmoon

Anmeldungsdatum:
10. März 2010

Beiträge: 269

komplett entfernen oder ersetzen? Beides kriegt man auf jeden Fall mit sed hin.

echo foo\"bar | sed "s#\"##"
foobar

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

gnude schrieb:

Nun kann es sein das darin ein Anführungszeichen ist und dann gibt es mit der Variable imn späteren Verlauf Probleme.

Was für Probleme? Man kann Variablen mit solchem Inhalt ganz normal verarbeiten.

1
2
3
4
5
6
7
$ var='a"b'
$ echo $var
a"b
$ echo "$var"
a"b
$ for i in "$var"; do echo "$i"; done
a"b

Also, wo ist das Problem?

Daher .... wie kann ich dieses Zeichen: " in einem Shellstring herausfiltern ???

Erst mal sollten wir klären, ob das nötig ist. Vermutung ist, dass Du ggf. nicht richtig gequotet hast. Aber dafür müsstest Du mitteilen, wie Du die Variable nutzt.

gnude

(Themenstarter)
Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

rklm schrieb:

gnude schrieb:

Nun kann es sein das darin ein Anführungszeichen ist und dann gibt es mit der Variable imn späteren Verlauf Probleme.

Was für Probleme? Man kann Variablen mit solchem Inhalt ganz normal verarbeiten.

1
2
3
4
5
6
7
$ var='a"b'
$ echo $var
a"b
$ echo "$var"
a"b
$ for i in "$var"; do echo "$i"; done
a"b

Also, wo ist das Problem?

Daher .... wie kann ich dieses Zeichen: " in einem Shellstring herausfiltern ???

Erst mal sollten wir klären, ob das nötig ist. Vermutung ist, dass Du ggf. nicht richtig gequotet hast. Aber dafür müsstest Du mitteilen, wie Du die Variable nutzt.

Hallo, das Ergebnis wird in einem PHP Script verarbeitet und die Probleme treten erst hier auf. Aber ich möchte um das zu vermeiden bereits bei der Datenaufarbeitung diese fehlerhaften Daten herausfiltern.

gnude

(Themenstarter)
Avatar von gnude

Anmeldungsdatum:
11. Juli 2014

Beiträge: 843

greenmoon schrieb:

komplett entfernen oder ersetzen? Beides kriegt man auf jeden Fall mit sed hin.

echo foo\"bar | sed "s#\"##"
foobar

Hallo greenmoon, der Wert befindet sich in einer Variable und soll auch in einer Variable bleiben.

greenmoon

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Und wo ist da das Problem? Ein bisschen Eigeninitiative ist immer gerne gesehen

var='foo"bar'
var2=$(echo $var | sed "s#\"##")
echo $var2
foobar

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

gnude schrieb:

das Ergebnis wird in einem PHP Script verarbeitet und die Probleme treten erst hier auf. Aber ich möchte um das zu vermeiden bereits bei der Datenaufarbeitung diese fehlerhaften Daten herausfiltern.

Dann müsstest Du es so ersetzen, dass das Escaping in PHP ordentlich funktioniert. Vielleicht so:

1
2
3
4
val='a"b\c d'
echo "$val"
escaped="$(echo -n "$val" | sed -e 's#["\\]#\\&#g')"
echo "$escaped"

Annahme: der Backslash wird in PHP als Escape für Anführungsstriche innerhalb eines Strings verwendet. Dann muss man die Anführungsstriche und den Backslash escapen. Möglicherweise auch mehr.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Ooooch -
statt mit sed und einer Command Substitution herumzubasteln könnte man das auch ganz bequem direkt mit einer Parameter Expansion erledigen:

track@track:~$ var='foo"bar'
track@track:~$ echo "${var//\"/}"
foobar
track@track:~$ v2=${var//\"/\\\"}
track@track:~$ echo $v2
foo\"bar 

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

track schrieb:

Ooooch -
statt mit sed und einer Command Substitution herumzubasteln könnte man das auch ganz bequem direkt mit einer Parameter Expansion erledigen:

Erstens geht das nur in der bash (und vielleicht anderen modernen Shells), aber nicht der sh. Zweitens wird das eklig, wenn man mehrere Zeichen ersetzen muss, da die bash meines Wissens keinen Platzhalter für den aktuellen Treffer kennt. Im aktuellen Fall (Escapen von " und \) kann man das noch mit zwei Ersetzungsschritten machen (erst den Backslash escapen, dann die Anführungsstriche). Mit mehreren Zeichen geht das nicht mehr so einfach.

Antworten |