Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Wörter in Datei umbenennen

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.10.2004
    Beiträge
    17

    Question Wörter in Datei umbenennen

    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

  2. #2
    Registrierter Benutzer Avatar von Caveman
    Registriert seit
    03.11.2005
    Ort
    Geilsheim
    Beiträge
    308
    Wie wär's mit folgenden Codeschnipsel:
    Code:
    s/u01/u0100/g;
    Programmiere (wenn es denn mal wieder vorkommt) in C, C++, Java, Perl
    Bin kein Student (Elektrotechnik) mehr und habe die Seiten gewechselt von der Software weg hin zur Hardware

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.10.2004
    Beiträge
    17
    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

  4. #4
    Registrierter Benutzer Avatar von Caveman
    Registriert seit
    03.11.2005
    Ort
    Geilsheim
    Beiträge
    308
    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.

    Code:
    #!/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
    Programmiere (wenn es denn mal wieder vorkommt) in C, C++, Java, Perl
    Bin kein Student (Elektrotechnik) mehr und habe die Seiten gewechselt von der Software weg hin zur Hardware

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.10.2004
    Beiträge
    17
    Aha, du schreibst in Perl.
    Wie sieht das ganz in Shellscript (unix/linux) aus?
    Geht das s/u01/u0100/g; da dann auch?

  6. #6
    Registrierter Benutzer Avatar von Caveman
    Registriert seit
    03.11.2005
    Ort
    Geilsheim
    Beiträge
    308
    Es sollte auch im Shellskript so ausschauen.
    Wie die Syntax ausherum aussieht kann ich Dir aus dem Stehgreif nicht sagen.
    Programmiere (wenn es denn mal wieder vorkommt) in C, C++, Java, Perl
    Bin kein Student (Elektrotechnik) mehr und habe die Seiten gewechselt von der Software weg hin zur Hardware

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Code:
    sed 's/u01/u0100/g' passwd > passwd.neu
    # oder inplace (bei neuen seds)
    sed 's/u01/u0100/g' -i passwd

  8. #8
    Registrierter Benutzer
    Registriert seit
    14.10.2004
    Beiträge
    17
    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

  9. #9
    Registrierter Benutzer
    Registriert seit
    14.10.2004
    Beiträge
    17
    Hallo zusammen,

    wie versprochen hier mal mein Erfolg im scripten.

    Code:
    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

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Nur zur Info. Anstatt der drei Anweisungen hättest du auch nur eine nehmen können:
    Code:
    sed 's/\(u0[1-3]\)/\100/g' ...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •