Henrik Schneider wrote:
> Gibt es eine Möglichkeit allen Benutzern eines PC die Startup Webseite
> festzulegen? Im moment schaut es bei uns so aus, das sich alle Benutzer
> ihre Startseite ändern, und somit keinen Blick mehr ins Intranet werfen.
> Ich dachte mir, ich suche nach einem shell-script das nach
> "browser.startup.homepage" in der prefs.js sucht und die ganze Zeile
> dann durch meine Vorgabe ersetzt. Nach ein wenig google habe ich aber
> nichts gefunden das genau dies tut. Alle Scripte suchen nur einen
> definierten Ausdruck und ersetzen dann genau diesen. Da die gesuchte
> zeile aber wie folgt aussieht:
>
> user_pref("browser.startup.homepage", "http://www.google.de");
>
> steh ich ein bischen im Wald, denn die Syntax von sed bleibt mir auch
> nach mehreren Versuchen ein Mysterium.
> Hat jemand von euch was in petto, das mir da helfen könnte?
So schwer ist das gar nicht mit dem sed. Das Ersetzen funktioniert damit so:
sed s/<zu suchender Ausdruck>/<Ersetzung>/<Flags>
Das "s" sagt sed, daß etwas ersetzt werden soll und die "/" dienen als
Begrenzer zwischen dem zu suchenden Ausdruck, der Ersetzung und den Flags.
Bei dem, was Du vor hast, würde das also bspw. so aussehen:
sed 's/user_pref("browser.startup.homepage",
"[^"]*");/user_pref("browser.startup.homepage", "http:
\/\/www.pug.org");/' <Eingabedatei>
Zu den Besonderheiten:
- Der zu suchende Ausdruck wird als regulärer Ausdruck interpretiert. Das
"[^"]*"
im zu suchenden Ausdruck paßt daher auf ein Anführungszeichen gefolgt von
einem beliebigen Zeichen, das kein Anführungszeichen ist, wobei der * sagt,
daß es beliebig viele dieser Zeichen sein dürfen, gefolgt von einem
Anführungszeichen. MaW: "[^"]*" paßt auf eine beliebige in Anführungszeichen
eingeschlossene Zeichenkette, die selbst kein Anführungszeichen enthält, und
paßt damit natürlich insbesondere auf einen beliebigen in Anführungszeichen
eingeschlossenen URL.
- Da die / als Begrenzer zwischen den einzelnen Teilen der Ersetzungsregel
dienen, muß man für /, die bspw. im zu ersetzenden Text als Zeichen vorkommen
sollen, deutlich machen, daß sie in diesem Fall eben nicht als Begrenzer
fungieren. Das tut man durch Voranstellen von (Escapen mit) \.
Deswegen "http:\/\/...".
Das ist natürlich nicht schön und man hat schnell mal einen \ vergessen. Da
hilft es dann, daß es nicht unbedingt der / sein muß, der als
Begrenzungszeichen verwendet wird. Man kann sich auch ein anderes Zeichen
aussuchen, z. B. @. Das würde dann so aussehen:
sed '[EMAIL PROTECTED]("browser.startup.homepage",
"[^"]*");@user_pref("browser.startup.homepage", "http://www.pug.org");@'
- Der gesamte Ausdruck ist deswegen in ' eingeschlossen, damit die Shell
bestimmte Zeichen wie die " nicht weginterpretiert.
Noch etwas:
- Hinreichend neue Versionen von GNU sed erlauben per -i, daß sed die
Eingabedatei direkt verändert anstatt das Ergebnis nach stdout zu schreiben.
- Der Punkt steht in regulären Ausdrücken für ein beliebiges Zeichen. Im
Prinzip müßte der oben auch escaped werden, um klar zu machen, daß es in
diesem Falle nicht um ein beliebiges Zeichen sondern um das Zeichen Punkt
geht:
browser\.startup\.homepage
- Flags brauchen wir in diesem Beispiel nicht, deswegen sind auch keine
angegeben.
Gruß
mks
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org