[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: (OT) Hilfe zu sed?



am 31.03.11 21:59 schrieb Gerhard Schromm <gschromm-spam@arcor.de>:

On 31 Mar 2011, Jim Knuth stated:
Sorry für den Titel. Mir is nix anderes eingefallen.
Ich habe hier eine Liste (/etc/passwd) mit folgenden Einträgen:

web10p1:x:1177:5000::/home/mail/web10p1:/bin/false
2. Eintrag
web10p1:x:1177:5000::/home/mail/web10p1::userdb_mail=maildir:~/Maildir
2. Eintrag
etc.

Also das /bin/false abschneiden und an die Stelle
:userdb_mail=maildir:~/Maildir einfügen.

Wenn am Ende der Zeilen immer "/bin/false" steht, sollte
#v+
sed -e's#/bin/false$#:userdb_mail=maildir:~/Maildir'</etc/passwd
#v-
das gewünschte erledigen. Allgemeiner (also nicht immer "/bin/false" am
Ende) ginge:
#v+
sed -e's#[^:]\+$#:userdb_mail=maildir:~/Maildir#'</etc/passwd
#v-

na ja, da sind schon noch`n paar Sachen drin, die da nicht rein sollen
(ausser das /bin/false). Das ist die komplette passwd von Debian mit
allen User (root, mysql, etc) Es müsste NUR die zeilen mit bspw.
den Mailuser (web10p1) drinbleiben.


Beim letzten sed-Aufruf matcht die Regexp auf alle Zeichen (außer dem Doppelpunkt) ab dem
letzten Doppelpunkt bis zum Zeilenende, und ersetzt sie.

GNU-sed erlaubt beim Ausdruck 's/foo/bar' das ersetzen der '/' durch
beliebige Zeichen die nicht in den Ausdrücken vorkommen. Damit erspart
man sich das Gehampel mit den Backslashes.

HTH Gerhard
PS: Mehr über Regexp aka reguläre Ausdrücke kann man unter 'man 7 regex'
     nachlesen.
PPS: Das Problem lässt sich auch mit awk oder perl lösen.




--
Mit freundlichen Grüßen,
Jim Knuth

P.S.: Bitte senden Sie KEINE HTML-Mails!
Zufallszitat:
Wenn zwei Menschen immer dasselbe denken,
ist einer von ihnen überflüssig. [Churchill]


Reply to: