kanotix.com

Scripte - datei ändern vie script [edit]

Cool J. - 04.09.2006, 15:59 Uhr
Titel: datei ändern vie script [edit]
Hallo liebe KANOTIX Gemeinde,

Ich habe nun meinen neuen Job angefangen und muss zu meiner begeisterung feststellen das viele Server auf Linux laufen.
Mein PC leider noch nicht... -.- vermutlich auch nie.

Aber ich bräucht mal eure hilfe. Ich habe schon hie rund da gestöbert, aber ich steig da nicht ganz durch.

Ich brauch ein Shell Script das eine Datei nach einem bestimmten String durchsucht und diesen String dann durch einen anderen ersetzt. in meinem Fall ist es eine IP-Adresse auf dem DNS-Server, alles von Hand zu machen ist schwer und mir fehlt da irgendwie der Plan.

Ich habe mit dem sed rum hantiert, aber mit den variablen habe ich es auch nicht so. Verlegen

Code:
#!/bin/sh

echo "neue IP" >> datei2
tail +2 datei1 >> datei1
mv datei2 datei1


das habe ich mal zusammengeschustert, bringt nur nix. Traurig

Weiss einer von euch ein einfaches schnelles und leicht zu verstehendes Script???

Vielen Dank schon mal im vorraus.
Kano - 04.09.2006, 16:00 Uhr
Titel: RE: datei ändern vie script
perl -pi.backup s/alte_ip/neue_ip/g datei
Cool J. - 04.09.2006, 16:12 Uhr
Titel: RE: datei ändern vie script
Danke Kano,

aber ich versteh das nicht. Verlegen
Cool J. - 04.09.2006, 16:47 Uhr
Titel:
habs Smilie

Code:
#!/bin/sh

sed -i -e 's!alte_ip!neue_ip!' datei


danke Kano du warst der ausschlagebende punkt. Winken
Cool J. - 05.09.2006, 16:37 Uhr
Titel:
so jetzt habe ich doch noch eine frage, und merkt euch, ich bin kein programmierer.

ich muss einen ganzen stapel an dateien in einem ordner ändern.
mein kleines script von oben reicht da völlig, weil der string immer der gleiche ist in den dateien.

jetzt ist es aber so das ich vorher ein backup fahren will und dann noch alle dateien durchsuchen will.
die befehle dafür sind mir klar, aber es gibt da doch beim ausführen ein kleines problem.

ich habe in meinem script die befehle alle hintereinander geschrieben, und wenn ich es ausführe klappt das
script auch, aber zb das backup ist dann nicht von den alten dateien sondern von den neuen.

muss ich die befehle in schleifen packen damit er sie alle nach einander ausführt.

und wenn ja wie???

wenn nein wie dann???
severin - 05.09.2006, 18:10 Uhr
Titel:
Frage
poste doch mal das Skript, bitte
blauweiss - 06.09.2006, 06:11 Uhr
Titel:
Meinst du etwas in dieser Art:
Nimm lieber Perl, wie es Kano vorgeschlagen hat.

perl -pi.bak -e 's/alte_ip/neue_ip/g' *.txt; mv *.bak Backup

Ersetzt z.B. in allen '*.txt' -Dateien eines Ordners 'alte_ip' durch 'neue_ip'
und macht Sicherungskopien aller bearbeiteten Dateien nach '*.txt.bak',
anschl. werden die original -Dateien in den Unterordner 'Backup' verschoben.
Cool J. - 06.09.2006, 09:25 Uhr
Titel:
severin hat folgendes geschrieben::
Frage
poste doch mal das Skript, bitte


Tut mir leid, habe das Script nicht mehr, nach zu vielen fehlversuchen habe ich es gelöscht.

blauweiss hat folgendes geschrieben::
perl -pi.bak -e 's/alte_ip/neue_ip/g' *.txt; mv *.bak Backup


danke schön das funktioniert einwandfrei. habe sogar noch ein bissel darum herum gebastelt.

aber kanst du mir erklären was es mit dem perl überhaupt auf sich hat, ich finde im netz nichts hilfreiches. soll eine programmiersprache sein. Smilie

und noch was, jetzt nachdem ich das script fertig hatte muss ich zwei strings in einer datei ändern. (z. B. ip_alt1 und ip_alt2 in ip_neu1 und ip_neu2) kann man das in deinem befehl rein verschachteln?

für eine gute seite die mir das perl auf deutsch auch erklärt bin ich auch schon dankbar. Smilie

vielen dank euch allen schon mal für die hilfe.
horo - 06.09.2006, 10:06 Uhr
Titel:
Zitat:
...ich finde im netz nichts hilfreiches...

Dann hast Du nicht gesucht!
Fang mal dort an und hangel Dich weiter:
http://de.wikipedia.org/wiki/Perl

Ciao Martin

P.S.: Wenn Du Programmieranfänger bist (oder es werden willst Winken ), solltest Du Dir lieber Python anschauen:
http://de.wikipedia.org/wiki/Python_%28 ... sprache%29

just my 0.02¤
blauweiss - 06.09.2006, 12:56 Uhr
Titel:
@Cool J.
Schreibs einfach hintereinander:

perl -pi.bak -e 's/ip_alt1/ip_neu1/g; s/ip_alt2/ip_neu2/g' *.txt; mv *.bak Backup
Cool J. - 06.09.2006, 13:33 Uhr
Titel:
das habe ich sogar blos falsch. Smilie

so habe ich es gemacht: perl -pi.bak -e 's/ip_alt1/ip_neu1/g' 's/ip_alt2/ip_neu2/g' *.txt; mv *.bak Backup

danke dir für den tip.
blauweiss - 06.09.2006, 13:49 Uhr
Titel:
Cool J. hat folgendes geschrieben::
...viele Server auf Linux laufen.
Mein PC leider noch nicht... -.- vermutlich auch nie.

Da du wohl eingefleischter Windows-User bist, würde mich mal interessieren,
wie eine solche Aufgabe da zu lösen ist,
oder dürfen wir dich, früher oder später doch in der Linuxwelt begrüssen?
Cool J. - 06.09.2006, 15:09 Uhr
Titel:
naja ich habe nen testserver den ich per putty verbinde.

dort habe ich dummy dateien um das ganze zu testen, später schiebe ich das script einfach auf den echtserver und führe es aus. Smilie

ich habe schon angedeutet das ich wieder linux haben will. mich wiedert das richtige arbeiten mit windows irgenwie an. alleine die tasks zu verwalten und den überblick zu behalten macht mich irre. Böse

und wenn ich linux wenigstens auf ner virtual machine laufen lassen dürfte, dann wär mir schon geholfen, würde das windows nur für mail und die warenwirtschaftssoftware benutzen...
horo - 06.09.2006, 16:33 Uhr
Titel:
Du kannst Dir z.B. cygwin installieren, da sind die meisten Unix-Tools dabei. Es gibt - wenn ich mich recht erinnere - sogar einen Satz Unix-Tools von MS. Auch Perl und Python gibt's für Win (ActiveState).

Ciao Martin
Cool J. - 07.09.2006, 11:01 Uhr
Titel:
Ich muss mein Script erweitern... -.-

ich will das mir die anzahl der geänderten dateien angezeigt wird.

ich dachte da an grep oder find...

ich weiss aber irgendwie nicht wie ich das ohne probleme einbinden soll

ein tip der mich weiter bringt und nicht alles verrät wär super. Smilie

EDIT:

ich denke ich habs, hab mal nen admin gefragt,
Code:
grep suchwort *.txt | wc

Andreas - 07.09.2006, 16:21 Uhr
Titel:
wenn du wirklich nur die anzahl der geänderten dateien willst dann wäre
grep -l suchwort *.txt | wc -l
besser geeignet

einfach mal das manual zu grep durchlesen, dann siehst du schon was du brauchst
genau genommen gibst du in deinem skript jetzt die anzahl der geänderten zeilen aus (können auch mehrere pro datei sein)
Alle Zeiten sind GMT + 1 Stunde
PNphpBB2 © 2003-2007