Shell Scripting - Befehl für replcstr unter Linux???

Post Reply
Message
Author
idlaW
Posts: 6
Joined: 08. Feb 2007 14:30

Shell Scripting - Befehl für replcstr unter Linux???

#1 Post by idlaW »

Hallo zusammen,

ich sitze gerade an einem größeren Problem und zwar soll ich zwei Windows Batch Dateien unter Linux zum laufen bekommen

Ich kämpfe schon seit Tagen mit den Scripts herum aber komme nur ganz langsam vorwärts. Nun ist der Punkt erreicht an dem ich nicht mehr weiter weiß

Folgenden Parameter möchte ich nun von Windows Batch in Linux Script umwandeln:

replcstr "%2~" "%2~~" %%Variable%% %Variable%

(Hinter %%Variable%% verbirgt sich ein Laufwerkspfad - zur Info)

Hat jemand eine Idee wie ich dies unter Linux umsetzen kann.

Bin wirklich um jeden hilfreichen Tipp froh

Vielen Dank im voraus

Gruß
Steffen

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Erstmal gibt es kein "Linux Script", sondern etliche Skriptsprachen. Ich nehme an, du möchtest/sollst die bash verwenden.

Es ist vermutlich einfacher, eine Lösung zu finden, wenn du beschreibst/ausprobierst, was der Befehl tun soll. replcstr scheint zumindest kein internes Kommando von cmd.exe zu sein, so dass mir die genaue Semantik dieses Aufrufs unklar ist.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

idlaW
Posts: 6
Joined: 08. Feb 2007 14:30

#3 Post by idlaW »

Hi,

sorry, habe vergessen dass replcstr ein zusätzliches Programm ist (replcstr.exe).
Denke aber dass das kleine Programm bei Programmieren sehr bekannt ist.

Der Befehl soll gute Frage was er eigentlich soll :lol: !!!

Oder besser gesagt ich suche ein Programm unter Linux, das mir Variablen in einer Datei ersetzt.

Sorry, falls noch unklar kann ich dies erst am Montag beantworten da der Mitarbeiter leider im Moment im Urlaub ist.

Trotzdem Danke erstmal

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

Für Stringersetzungen in Dateien gibt es verschiedene Möglichkeiten. Eine Möglichkeit ist es, sed zu verwenden.

Code: Select all

$ sed "s/ALTER_STRING/NEUER_STRING/g" <Quelldatei >Zieldatei
Man kann mehrere Ersetzungen kombinieren:

Code: Select all

$ sed "s/ALTER_STRING_1/NEUER_STRING_1/g;s/ALTER_STRING_2/NEUER_STRING_2/g;" <Quelldatei >Zieldatei
Wenn man keine festen Strings verwenden will, geht das ebenfalls, da die bash vor dem Aufruf des sed ja alle Parameter und Variablen in der Befehlszeile ersetzt.

Code: Select all

#!/usr/bin/bash
VAR='bla bla'
sed "s/ALTER_STRING_1/$1/g;s/ALTER_STRING_2/$VAR/g;" <Quelldatei >Zieldatei
Das richtige Quoten (",',\) kann trickreich sein.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

idlaW
Posts: 6
Joined: 08. Feb 2007 14:30

#5 Post by idlaW »

Hi Janka,

vielen Dank für Deine ausführliche Antwort, denke dass diese mir sehr weiterhelfen wird.

Kann ich eigentlich anstatt einer Quelldatei und Zieldatei auch eine Variable benutzen?


Noch eine kleine Frage da ich bis jetzt noch nicht viel unter Linux Programmiert habe:

Du schreibst beim Deinem letzten Beispiel #!/usr/bin/bash kann ich den Befehl auch für #!/bin/sh nehmen?

Vielen Dank im voraus

idlaW
Posts: 6
Joined: 08. Feb 2007 14:30

#6 Post by idlaW »

Hi Janka,

jetzt ist mir noch eines unklar und zwar habe ich jetzt folgendes angewendet:

replcstr "%2~" "%2~~" %%Test%% "%Test% (Windows Befehl - replcstr ersetzt Text oder Zeichenketten)

(Hinter %2~ und %2~~ stecken ja zwei Dateien in unterschiedlichen Verzeichnissen)

Im Moment habe ich es unter Linux so geschrieben:
sed "s/%%Test%%/ %Test%/g" <Quelldatei >Zieldatei

Kann ich jetzt z.B. anstatt <Quelldatei auch <$Variable schreiben???
Sprich einfach die Variable auslesen?

Vielen Dank im voraus

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#7 Post by jochen »

sed liest immer von der Standardeingabe. Aber wenn Du ihm dort den Inhalt der Variablen gibst, geht das auch:

Code: Select all

echo $VAR | sed 's/suchtext/ersetzungstext/g' >zieldatei
Jochen
Die grösste Lüge der EDV? "Mal eben..."

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#8 Post by Janka »

$irgendwas wird immer zum Inhalt der Variablen "irgendwas" expandiert, es sei denn, man quotet es z.B. mit '$irgendwas' oder \$irgendwas. Das kann man überall im Skript anwenden.

#! in der ersten Zeile ist eine Kennzeichnung, dass jetzt der Pfad des für das Skript zu verwendene Interpreter folgt. Da sollte /usr/bin/bash stehen, wenn man bash-Syntax verwendet. Die Bourne-Shell (meist /bin/sh) ist älter und kann nicht so viel. Bei Linux-Systemen ist meist auch /bin/sh einfach ein Link auf die Bash, das muss aber nicht so sein (bei BSD ist das z.B. nicht so), und kann dann zu Problemen führen.

Es gibt noch andere "tolle" Shells: ksh (pdksh), tcsh (für Skripte bäh!) oder zsh. Die sind aber eher selten installiert.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Post Reply