[gelöst] sed stringverarbeitung

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

[gelöst] sed stringverarbeitung

Beitrag von root2root » 09.02.2014 15:20:10

Hallo Gemeinde

das file0 enthält:
...
blah blah blupp blah
bla STRING blupp
...

diese Varianble setze ich
lnk="aaa&b=zahl&c=zahl"

Mit sed -e 's/STRING/${lnk}/' file0 >file1 versuche ich STRING durch den Variableninhalt zu ersetzen und in file1 zu speichern.
Das klappt nur "halb":

cat file1:
...
blah blah blupp blah
bla aaaSTRINGb=zahlSTRINGc=zahlSTRING blupp
...


sed fügt dem Inhalt von lnk anstelle "&" das zu ersetzende STRING ein.

Was mach ich da falsch ?

Bitte um Tipps
Danke.

Gruß root2root

Benutzeravatar
4A4B
Beiträge: 968
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: sed stringverarbeitung

Beitrag von 4A4B » 09.02.2014 15:57:53

Das & ist ein Metazeichen in sed, eben mit der Bedeutung, dass an der Stelle der zu ersetzende String eingefügt wird (was z.B. praktisch von Nutzen sein kann, wenn man einen anderen String nur anhängen möchte)

Du kannst das & mit einem \ maskieren:

Code: Alles auswählen

lnk="aaa\&b=zahl\&c=zahl"

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: sed stringverarbeitung

Beitrag von Cae » 09.02.2014 16:50:24

sed ist fuer stupide String-Ersetzung leider viel zu intelligent, das Problem koennte man mit wildem Escapen loesen, wie in [1] (fuer den linken Teil). Fuer den mittleren Teil des s/// braucht allerdings nur & und \ (sowie der Trenner, also meist /) mit einem Backslash escapt werden. Zumindest faellt mir auf Anhieb nicht mehr ein.

Gruss Cae

[1] viewtopic.php?p=944509#p944509
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

root2root
Beiträge: 168
Registriert: 22.10.2007 13:06:29

Re: sed stringverarbeitung

Beitrag von root2root » 10.02.2014 08:42:04

@ 4A4B

habs so gelöst:
-maskiertes &-

lnk="aaa&b=zahl&c=zahl"
lnk=$(echo ${lnk//"&"/"\&"})

# echo $lnk
aaa\&b=zahl\&c=zahl

Das kann sed problemlos verarbeiten:

cat file1:
...
blah blah blupp blah
bla aaa&b=zahl&c=zahl blupp
...


Danke an alle

Gruß root2root

Antworten