Folgende Zeile soll zeigen, wie man mit dem Befehl "sed"
aus einer Config-Datei (hier "smb.conf") nach einem bestimmten Suchmuster (=Freigabename) suchen kann.
Nehmen wir an, wir haben für verschiedene User Freigaben in der smb.conf eingetragen, die mit [hostname] beginnen. Gelegentlich wollen wir bestimmte Freigaben löschen, ohne uns mit "vi" durch die "smb.conf" hangeln zu müssen u. manuell zu löschen. Ein grafisches Tool wollen wir nicht verwenden, da der Server komplett ohne X-Window läuft

Sobald sed das Muster in der Config entdeckt hat, soll es die gefundene Zeile sowie die folgenden Zeilen löschen, BIS zur Zeile in der das Muster "printable = no" steht.
sed soll also einen ganzen Block aus der Config Datei löschen. Dazu wird ein Anfangsbereich und Endbereich angegeben.
Dieser Bereich wird dann komplett aus der 'smb.conf' geloescht.
Die Synthax dafuer lautet
sed -e /"Anfang"/,/"Ende"/D
Da in der 'smb.conf' nicht nur eine Zeile geloescht werden muss, wird der sed Befehl erweitert. sed soll zunaechst die Zeile finden, die mit folgendem String beginnt: [hostname] und dann diese Zeile
entfernen.
Da '[' von der bash interpretiert werden kann, muessen dazu die Klammern ('[]') maskiert werden ('\[').
Der ganze Such-String muss in Gaensefuesschen gesetzt sein (""), damit sed die entsprechende Zeile finden und loeschen ('/D') kann.
Es soll jedoch nicht nur die Zeile in der 'smb.conf' geloescht werden, die den Hostnamen enthaelt [hostname] sondern auch alle folgenden Zeilen BIS EINSCHLIEßLICH der Zeile 'printable = no', die den Abschluss dieser Freigabe fuer den zu loeschenden User darstellt.
Das $1 steht für den Hostnamen. Der "hostname" steht für den Rechnernamen, auf den die Freigabe im Beispel benannt wurde.
Das Ergebnis der "sed" Bearbeitung wird in eine temporäre Datei geschrieben "smb.conf.var" und diese überschreibt dann die Original-smb.conf.
Wenn das Script, das die Anweisung enthält, z.B. "delete_freigabe" heisst, ruft man es so auf:
./delete_freigabe hostname
####################################
sed -e /"\[$1\]"/,/"printable = no"/D /etc/samba/smb.conf > /tmp/smb.conf.var
mv /tmp/smb.conf.var /etc/samba/smb.conf
####################################