substitution unter sed

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tco, 24.08.2009.

  1. tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    ich verusche gerade mit sed die passwd zu bearbeiten um die gid und uid zu ändern. weil sie nicht immer gleich ist will ich erstmal den relevanten user herausgrepen. folgendes script will aber nicht so wie ich will:

    Code:
    sed 's!$(cat passwd | grep user)!user:x:uid:gid:der user:/opt/user:/bin/bash!g'< passwd > passwdnew
    
    auch ein
    Code:
    sed 's!${cat passwd | grep user}!user:x:uid:gid:der user:/opt/user:/bin/bash!g'< passwd > passwdnew
    
    macht kein unterschied. wie kann ich also unter sed richtig substituieren?

    danke schonmal
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 24.08.2009
    Zuletzt bearbeitet: 24.08.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    prinzipiell ist die genaue Fehlermeldung immer hilfreich. Ich habe mir den Ausdruck jetzt nicht genau angeguckt, aber wenn ich das richtig sehe, versuchst du das Ausrufezeichen als Trennzeichen fuer sed zu benutzen. In der bash wird das nicht funktionieren, weil das Ausrufezeichen eine Sonderbedeutung hat.
    Auch das 'cat' ist unnoetig, grep kann direkt aus Dateien lesen.

    mfg,
    bytepool
     
  4. #3 floyd62, 25.08.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hallo,

    wenn du single quotes (') verwendest, werden die Variablen und Kommandos (${} bzw. $()) innerhalb davon nicht ausgewertet, sondern gehen unverändert an den sed weiter, und Zeilen, wie die, nach denen du damit also suchst, gibt es in der passwd wohl eher selten.

    (NB: innerhalb von single quotes hat auch '!' keine Sonderbedeutung, ansonsten ist bytepools Einwand aber voll berechtigt; ich bevorzuge in so einem Fall meistens '|'.)

    Und schliesslich: warum die passwd-Datei zweimal lesen (grep und sed), wenn das Ganze auch in einem Durchgang zu erledigen ist: du suchst einfach nach Zeilen, die mit dem gewünschten Login-Namen anfangen, und ersetzt darin Feld 3 und 4, etwa so:

    Code:
    LOGIN=user
    USERID=1000
    GROUPID=1000
    
    sed -e "s|^$LOGIN:x:[0-9]*:[0-9]*:\(.*\)|$LOGIN:x:$USERID:$GROUPID:\1|" <passwd >passwd
    
    Nochmal NB: anstatt die /etc/passwd allerdings mit sed zu verwursteln, würde ich das Ganze eher mit "usermod -u ... -g ... " bearbeiten ... ;-)

    Gruss
     
  5. #4 bytepool, 25.08.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    mhh, verrueckt, ich koennte schwoeren dass ich das vor ein paar Monaten noch getestet habe (sed mit ! als Trennzeichen), und es nicht funktionierte. Aber du hast Recht, hab's grad nochmal getestet, funktioniert wunderbar solange man mit single quotes arbeitet. I stand corrected once again...

    mfg,
    bytepool
     
  6. #5 tco, 25.08.2009
    Zuletzt bearbeitet: 25.08.2009
    tco

    tco sysinstall/noob

    Dabei seit:
    22.01.2007
    Beiträge:
    20
    Zustimmungen:
    0
    danke für die antworten.
    eine fehlermeldung hab ich nie bekommen. obwohl ich sogar -x übergeben habe. ich schätze dass sed schon richtig gearbeitet hat, aber die substitution einfach nicht gemacht hat. also hat er nach dem falschen gesucht, nichts gefunden und auch nichts ausgetauscht. so wie floyd62 schon richtig vermutet.

    da ich das für mehrere systeme machen muss und die UID und GID nicht immer gleich vegeben worden ist, dachte ich mir, ich machs mir leicht durch direktes bearbeiten der passwd und group.

    edit:
    ich hab das ganze jetzt folgendermassen gelöst:
     
Thema:

substitution unter sed

Die Seite wird geladen...

substitution unter sed - Ähnliche Themen

  1. Doppelte Kommando Substitution

    Doppelte Kommando Substitution: Hallo zusammen, auf ein neues :) Möchte folgendes realisieren. in Sppbin soll erst "`echo $service | $AWK -F: '{print $4}' | $AWK -F:...
  2. Parametersubstitution & command not found

    Parametersubstitution & command not found: Guten Abend, meine bash und ich verstehen uns gerade nicht so gut, kann hier jemand zwischen uns vermitteln? ;) Wie kann ich einer...
  3. find und substitutions-problem

    find und substitutions-problem: hallo zusammen, ich hab hier ein problem mit find und krieg`s einfach nicht hin! also, ich will im dateinamen über mehrere verzeichnisse den...
  4. Kommandosubstitution und egrep

    Kommandosubstitution und egrep: Hallo, ich bin auf einem debain-basierendem System mit der Shell (möglicherweise auch die dash, ist leider nicht mein Server) unterwegs Ich...
  5. Kommandosubstitution?

    Kommandosubstitution?: Hi, ich würd gern mal erfahren (und zwar am besten genau und mit Beispiel), was Kommandosubstitution genau bedeutet. Irgendwie finde ich leine...