Hi smg,
hui, harte Worte ... will hier jetzt keinen Flamewar starten
, bin mir aber nicht ganz sicher, ob ich Dir da bei allem so 100%ig zustimmen kann:
Zum einen, OK, der Match auf die gesamte Zeile und das '&' im Replacement führen wahrscheinlich zu einigen sed-internen Kopieraktionen; effizienter wäre wohl etwas wie
Code:
sed -e "/^${group_name}:/s/$/,${user_name}/" <group >group.$$
(als praktisch Deine Lsg.)
Wo ich Dir definitiv widersprechen muss, ist allerdings, daß das '&' im Replacement GNU-spezifisch sei: das ist ein Feature in sed, solange ich ihn kenne, auch z.B in der "System V Interface Definition" so beschrieben, und sollte daher wirklich auf allem funktionieren, was sich "UNIX" oder so ähnlich nennen darf.
Die '-i'-Option allerdings, die Du in Deinem sed-Kommando anführst, wird nicht nur von sed auf einigen Nicht-Linux-Systemen nicht unterstützt, sondern ist nicht mal in allen GNU-sed-Releases verfügbar, die ich hier (immer noch
) am Laufen habe:
Code:
$ sed --version
GNU sed version 3.02.80
# Steinzeit-Version, klar ...
$ sed -i
sed: invalid option -- i
...
Daher führt also wohl - wenn's denn portabel sein soll -- kein Weg an dem Gehampel mit den temporären Dateien vorbei.
Und, um nochmal auf die ursprüngliche Aufgabe zurück zu kommen (also einen Benutzer in eine Gruppe aufzunehmen) -- Hi Janine, sorry, ich will hier auf keinen Fall Deinen Thread hijacken --:
Wenn man das mit "usermod" erledigt (und die bisherigen Gruppen vorher mit "groups" oder zur Not "awk" einsammelt etc.), hat man nicht hinterher das Problem, überflüssige Kommata (wieder mit sed?) entfernen zu müssen, die mit einer so einfach gestrickten sed-Notlösung entstehen, wenn man einen User zu einer bisher leeren Gruppe hinzufügt.
Grüße. floyd62