Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • »michseel« ist der Autor dieses Themas

Beiträge: 2

Registrierungsdatum: 23.08.2008

Derivat: Ubuntu

Architektur: 64-Bit PC

  • Nachricht senden

1

15.06.2012, 20:44

Shellscript: /etc: IP und Hostname ersetzen

Hallo zusammen,

ich möchte in ein Shellscript eine Ersetzung einbauen.

Es sollen alle Dateien im Verzeichnis /etc/ geprüft werden und beispielsweise "192.168.1.1" durch "192.168.1.2" und "server1.domain.de" durch "server2.domain.de" ersetzt werden.

Kann mir hier jemand weiterhelfen, wie ich das am besten hinbekomme?

Durch Google bin ich auf "sed" gestoßen, steige bei den Beispielen und Erläuterungen jedoch leider nicht ganz durch.

Einen ersten Versuch habe ich gestartet mit:

Quellcode

1
sed 's/192.168.1.1/192.168.1.2/g' *


Doch das ergibt nur die Fehlermeldung:


Zitat

sed: read error on etc: Is a directory



Vielen Dank im Voraus!

Viele Grüße
michseel

Beiträge: 6 680

Registrierungsdatum: 04.06.2005

Derivat: Kein Ubuntu-Derivat

Version: gar kein Ubuntu

Architektur: 64-Bit PC

Desktop: anderer Desktop

Andere Betriebssysteme: Arch Linux

  • Nachricht senden

2

15.06.2012, 21:00

Hallo,

hast du nicht die Angabe des Dateinamens vergessen welcher durchsucht und wo geändert werden soll?

m.f.g.
Carl-Heinz

Nachtrag:
hatte den * am Ende leider übersehen.
###--- Gott sei Dank, ich bin weg vom Fenster ---###


Hilfen:
- Mir eine Nachricht senden - - Meine Homepage - - Linux-Beginnerforum -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Linuxtal« (16.06.2012, 17:07)


3

16.06.2012, 02:06

Als erstes würde ich die Dateien suchen lassen, wo die Begriffe tatsächlich drin sind. Sonst kann das dauern. -> grep
Und in /etc/ braucht man root-Rechte. -> sudo
Ein Backup der veränderten Dateien wäre auch gut. -> sed -i.bak

Quellcode

1
sudo grep -lrE 'server1.domain.de|192.168.1.1' /etc/ | xargs sed -i.bak 's/server1.domain.de/server2.domain.de/g; s/192.168.1.1/192.168.1.2/g'
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »floogy« ist männlich

Beiträge: 3 071

Registrierungsdatum: 10.03.2005

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 3.0

Andere Betriebssysteme: debian

  • Nachricht senden

4

16.06.2012, 12:05

Hallo Fredl, Ich denke dass es nach der Pipe ein weiteres sudo braucht und Fehlermeldungen greps nicht an sed durchgereicht werden sollten.

Quellcode

1
sudo grep -lrE 'server1.domain.de|192.168.1.1' /etc/ 2>/dev/null| xargs sudo sed -i.bak 's/server1.domain.de/server2.domain.de/g; s/192.168.1.1/192.168.1.2/g'

5

16.06.2012, 16:22

Hast Recht, floogy. War nur ein Rohentwurf, in /tmp/ getestet :)
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »floogy« ist männlich

Beiträge: 3 071

Registrierungsdatum: 10.03.2005

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 3.0

Andere Betriebssysteme: debian

  • Nachricht senden

6

16.06.2012, 19:58

Dafür kannte ich noch nicht -i.SUFFIX für Backups und sed '<sed command>;<2nd sed command>', hatte das immer mit -e gemacht: sed -e 'sed command' -e '2nd sed command' | sed -E 'next sed command'

7

16.06.2012, 21:39

-i.SUFFIX für Backups
Ist aber etwas zweischneidig: Wiederholt man das Kommando ohne gezielte Dateiauswahl, wächst die Zahl der Backups mit immer längeren Dateinamen sukzessive an. (*.bak.bak.bak.bak...) -> hinterher aufräumen!
-i ohne suffix schreibt nur in die Datei, aber in /etc/ würde ich mit Sicherungskopien ruhiger schlafen :)
hatte das immer mit -e gemacht
Wenn nix dasteht, nimmt sed von selbst "-e".
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »floogy« ist männlich

Beiträge: 3 071

Registrierungsdatum: 10.03.2005

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 3.0

Andere Betriebssysteme: debian

  • Nachricht senden

8

16.06.2012, 21:49

sed: read error on etc: Is a directory

Wie linuxtal schon schrieb fehlt die genaue Dateiangabe. Bei Verzeichnissen kommt diese Fehlermeldung. Erweitert die Shell den Asterisk * mit dem Inhalt des aktuellen Verzeichnisses (globbing), und sed stößt auf ein Verzeichnis kommt die Fehlermeldung. Ohne -i wird keine Datei geändert, sondern der geänderte Dateiinhalt auf der Konsole stdout ausgegeben.