String-Manipulation in Shell-Skript?

akberlin

Neuer User
Mitglied seit
9 Jan 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
1
Hallo!

Ich möchte ein Shell-Skript schreiben, dass die String Manipulationsmöglichkeiten ala Bash nutzt (siehe http://tldp.org/LDP/abs/html/string-manipulation.html). Leider scheint nur die Längenbestimmung zu funktionieren, denn das hier funktioniert und liefert "9"...

Code:
strz=abcdedcba
echo ${#strz}

Das folgende Beispiel führt zu einem "Syntax error: bad substitution"... mach ich was falsch?

Code:
strz=abcdedcba
stra=c
strb=x
echo ${strz//stra/strb}

Zum Einsatz kommt eine Fritz!Box 7270 mit FW 54.04.55 (nicht Beta! :))

Gruß Andreas
 
Wenn das mit bash funktioniert (und es kommt zumindest eine Fehlermeldung, auch wenn es möglicherweise nicht das tut, was Du Dir vorstellst), aber mit der Busybox Shell nicht, dann unterstützt vermutlich die Busybox diese Konstruktion nicht.

Man sollte nicht vergessen, daß bash keine POSIX minimal Shell ist, sondern einige Erweiterungen hat, die man nicht überall erwarten kann.

Ich vermute, daß Du in der letzten Zeile das schreiben wolltest:
Code:
echo ${strz//$stra/$strb}
 
Hallo,

was willst du denn genau erreichen? Die eingebaute Shell hat eben nur eingeschränkte Möglichkeiten :(

Wenn du Zeichenketten ersetzen möchtest, geht auch der sed, also z.B. (wir fangen mal einfach an ;) ):

Code:
# Ersetze $f mit $r
f="x"
r="y"
source_string="abcdefgxabcdefg"
echo $source_string|sed "s/$f/$r/"
# oder als Zuweisung
target_string=`echo $source_string|sed "s/$f/$r/"`
echo $target_string

Ich hoffe das hilft wenigstens etwas

Thomas
 
Was ich eigentlich will...

OT: Warum fällt mir immer nur beim lesen anderer Beiträge auf, dass die Leute nicht wenigstens schreiben, was sie ursprünglich erreichen wollten - nur damit ich das selbst vergesse zu schreiben?

@Ralf, ja die $ habe ich vergessen...

@Thomas: Ich möchte in das /var/flash/calllog ein paar Funktionen unterbringen, unter anderem soll mit WGET ein Request gemacht werden, der als Parameter die Daten des Anrufers weitergibt... nun kann aber der Anrufername z.B. Leerzeichen enthalten, ich ich URL-konform in "+" übersetzen will - also " " -> "+"... werde gleich mal Deine Lösung probieren...

Vielen Dank Euch zwein... ihr seid echt schnell! :-)

Gruß Andreas
 
... dann schau mal in diesen Thread: anrufliste an server senden, da sollte schon ein passendes Kommando aus "tr" und "sed" vorhanden sein. Oder zumindestens ein guter Ausgangspunkt

Thomas
 
Hallo nochmal Thomas,

Das ist genau die richtige Lösung, nur dass ich halt ALLE Leerzeichen gegen+ austauschen will - hab ich das richtig als sed "s/ /+/g" übersetzt?

Vielen Dank! Gruß Andreas
 
Na, der Thread ist auch ein Supertreffer! Danke nochmals! :-)
 
ich möcht aus einem String z.B:

ftp://ftp.home.com/dir/dir2/dateinane

gern dateiname extrahieren.

wenn ich mit index nach / suche, kann ich ja nur die Position des 1. finden, ich brauche aber die Pos des letzten .....

get das ohne viel Aufwand ?
 
Code:
PN=ftp://ftp.home.com/dir/dir2/dateinane
FN=${PN##*/}

Sogar ohne Aufruf von externen Programmen. Die Erklärung dazu gibt es bei "man bash".
 
Kostenlos!

Statistik des Forums

Themen
248,924
Beiträge
2,305,258
Mitglieder
378,649
Neuestes Mitglied
DiamondExchangeNetwork