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

Re: (OT) Hilfe zu sed?



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-

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.


Reply to: