sed echo

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
monox
Beiträge: 16
Registriert: 31.10.2006 23:52:55

sed echo

Beitrag von monox » 14.11.2006 00:20:59

Hallo zusammen!

Ich habe ein Problem, welches auf den ersten Blick recht einfach ausschaut, dann sich aber als komplizierter entpuppt hat. Ich habe hierzu schon in der bash-FAQ! nachgeschaut. Ich möchte in einem bestimmten file bestimmte Wörter innerhalb von echos durch ein anderes Wort austauschen. Ich habe dies geschafft, nur reisst es mir auch Wörter mit die z.b. hinter einem ### stehen, also als Kommentar. Dies möchte ich jedoch vermeiden.
Unter Umständen könnte ja so sogar noch Code drunter leiden.

Kann mir hier jemand helfen??

Also jedes mal, wenn etwas kommt mit echo "blababla", tausche in diesem echo "blabla" das Wort 1 durch Wort 2 aus....

Code: Alles auswählen

a=ich 

b=du

echo $a | sed -i "s/$a/$b/" echotest.sh
Dies ist der Code, welcher zwar funktioniert, aber zu viel anrichtet.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von rendegast » 14.11.2006 00:49:31

Vielleicht mit Gruppierungen und dem expliziten "\#":

Code: Alles auswählen

... | sed 's@\(.*\)$A\(.*\)\#\(.*\)@\1$B\2\#\3@' ...
Zuletzt geändert von rendegast am 03.06.2007 18:33:09, insgesamt 1-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von markus_b » 14.11.2006 02:27:27

rendegast hat geschrieben:

Code: Alles auswählen

... | sed 's/\(.*\)$A\(.*\)\#\(.*\)/\1$B\2\#\3/' ...
Bei so vielen Backslashs wird einem ja schlecht :wink:

Mein Vorschlag (ungetestet!)

Code: Alles auswählen

sed -re "s/^([^#]*echo[^#]*)$a/\1$b/" < datei

Antworten