PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wörter in Datei umbenennen



mobas
12-05-2006, 12:18
Hallo zusammen!

Ich hoffe hr könnt mir mal wieder helfen! :)

Folgendes:
Ich will per Script die Usernummern in der passwd ändern, da diese sich dank einer Umstellung geändert werden sollen.
Nun macht es alo keinen Spass ca. 8500 Usernummern per Hand zu bearbeiten! ;)
Darum: Ein Shellscript muss her!

Die passwd ist ja folgendermaßen aufgebaut:



u01864:!:9311:55::/Pfad/zum/Home/u01864:/usr/bin/ksh
u01872:!:9312:55::/Pfad/zum/Home/u01872:/usr/bin/ksh
u01873:!:9313:55::/Pfad/zum/Home/u01873:/usr/bin/ksh
u01874:!:9314:55::/Pfad/zum/Home/u01874:/usr/bin/ksh


Es soll hierbei die Usernummer mit zwei Nullen erweitert werden.
So das das ganze diese Form hat:


u0100864:!:9311:55::/Pfad/zum/Home/u0100864:/usr/bin/ksh
u0100872:!:9312:55::/Pfad/zum/Home/u0100872:/usr/bin/ksh
u0100873:!:9313:55::/Pfad/zum/Home/u0100873:/usr/bin/ksh
u0100874:!:9314:55::/Pfad/zum/Home/u0100874:/usr/bin/ksh


Hat da zufällig jemand nen Gedanken wie ich das anstellen kann?
Bin da etwas auf dem Schlauch des Ideenflusses getreten. :)

Vielen Dank für Eure Hilfe schon mal vorab!!!

Gruß,
Mobas

Caveman
12-05-2006, 12:27
Wie wär's mit folgenden Codeschnipsel:

s/u01/u0100/g;

mobas
12-05-2006, 12:33
Hallo Caveman,

danke schon mal für deine Antwort.
Aber wie meinst denn das?

Ich würde so anfangen das ich nen cat auf die passwd mache und die Ausgabe in ne Variable schreibe.
Diese dann anschliessend Zeile für Zeile durcharbeite.

Wie sollte ich da dann deinen Vorschlag umsetzen?

Danke dir!

Gruß,
Mobas

Caveman
12-05-2006, 12:40
Wie's mit einem shell-Skript geht weiß ich selbst nicht so recht - wahrscheinlich wäre awk da noch besser.
Ich würde es mit Perl machen.



#!/usr/bin/perl

open(LESEN, "</etc/passwd");
open(SCHREIBEN, ">newpasswd");

while(<LESEN>)
{
s/u01/u0100/g;
print SCHREIBEN $_;
}

close(LESEN);
close(SCHREIBEN);

Achtung: ungetestet
ohne Gewehr

mobas
12-05-2006, 12:48
Aha, du schreibst in Perl.
Wie sieht das ganz in Shellscript (unix/linux) aus?
Geht das s/u01/u0100/g; da dann auch?

Caveman
12-05-2006, 13:06
Es sollte auch im Shellskript so ausschauen.
Wie die Syntax ausherum aussieht kann ich Dir aus dem Stehgreif nicht sagen.

Joghurt
12-05-2006, 13:14
sed 's/u01/u0100/g' passwd > passwd.neu
# oder inplace (bei neuen seds)
sed 's/u01/u0100/g' -i passwd

mobas
12-05-2006, 19:51
Hallo,

vielen Dank für die Antworten!!!
Ich werde das ganze mal ausprobieren und meinen Erfolg oder eventuellen Mißerfolg mal posten.

Schönen Abend Euch noch!!!

Gruß,
Mobas

mobas
17-05-2006, 10:48
Hallo zusammen,

wie versprochen hier mal mein Erfolg im scripten.



PASSWDOLD="passwd_original"
PASSWDNEW="passwd_neu"

sed 's/u01/u0100/g;
s/u02/u0200/g;
s/u03/u0300/g' $PASSWDOLD > $PASSWDNEW


Funktioniert super so! :)

Danke noch mal an alle!

Gruß,
Mobas

Joghurt
17-05-2006, 12:49
Nur zur Info. Anstatt der drei Anweisungen hättest du auch nur eine nehmen können:

sed 's/\(u0[1-3]\)/\100/g' ...