Sed befehl benötigt
-
- Beiträge: 210
- Registriert: 02.09.2009 20:23:05
Sed befehl benötigt
Guten Tag,
und zwar versuche ich gerade einen text zu verändern per Sed.
Also ich habe ein Interface worüber man Mumble Voiceserver starten kann, in den Einstellungen kann man einen Willkommenstext angeben. Dieser Willkommenstext wird über FTP an den Mumble Server übertragen.
Jetzt möchte ich mit Sed einen textabschnitt an diesen gerade angegebenen Text anhängen.
Wie ist das umzusetzen ? Der Textabschnitt wird mit einer Variable dran gehängt.
Hier mal mein Sed Abschnitt:
sed -e '/welcometext=/c\welcometext=mumbleserver' mumble-server.ini > backup.ini
Die Option "i" von Sed kenne ich nur weiß ich nicht wie ich daraus einen Befehl bauen kann.
Gruß
Debuser1988
und zwar versuche ich gerade einen text zu verändern per Sed.
Also ich habe ein Interface worüber man Mumble Voiceserver starten kann, in den Einstellungen kann man einen Willkommenstext angeben. Dieser Willkommenstext wird über FTP an den Mumble Server übertragen.
Jetzt möchte ich mit Sed einen textabschnitt an diesen gerade angegebenen Text anhängen.
Wie ist das umzusetzen ? Der Textabschnitt wird mit einer Variable dran gehängt.
Hier mal mein Sed Abschnitt:
sed -e '/welcometext=/c\welcometext=mumbleserver' mumble-server.ini > backup.ini
Die Option "i" von Sed kenne ich nur weiß ich nicht wie ich daraus einen Befehl bauen kann.
Gruß
Debuser1988
## Internet ##
Telekom VDSL 100 / 40
## Router ##
Speedport W724v + PFSense im CARP HA
## System Konfiguration ##
Multiboot: Debian
## Blog ##
http://blog.mincore.de
Telekom VDSL 100 / 40
## Router ##
Speedport W724v + PFSense im CARP HA
## System Konfiguration ##
Multiboot: Debian
## Blog ##
http://blog.mincore.de
-
- Beiträge: 7
- Registriert: 14.10.2010 22:26:25
- Wohnort: Radebeul
Re: Sed befehl benötigt
Hallo,
bei der variable scheitert es bei mir auch noch hab ihr aber ein Beispiel wo es ohne var geht.
vllt hift es dir
Da Slashes (/) ein Trennzeichen ist , sind in diesen keine Variablen möglich stattdessen sollte man (") (somit kein !) und # nutzen, doch da ist auch genau mein Problem denn ich bekomme es nicht hin das sed mir über eine var das Wort plus 5 Zeilen darunter löscht
mein code
ja man-page gelesen ..google brachte auch keinen Erfolg
da diese Probleme selber Natur sind wollte ich keinen neuen thread eröffnen.
Ich entschuldige mich für die Unannehmlichkeiten !!
gre
Jonny
bei der variable scheitert es bei mir auch noch hab ihr aber ein Beispiel wo es ohne var geht.
vllt hift es dir
Code: Alles auswählen
sed -i -e '/^vorhandenes Wort/s!$! nachfolgende Wörter!' Datei
mein code
Code: Alles auswählen
if sed -i -e "#$name#{N;N;N;N;N;d}" $smb
then
echo "Freigabe würde gelöscht"
else
echo "konnte freigabe nicht löschen . Bitte prüfen Sie ihre Rechte !!" fi
da diese Probleme selber Natur sind wollte ich keinen neuen thread eröffnen.
Ich entschuldige mich für die Unannehmlichkeiten !!
gre
Jonny
Re: Sed befehl benötigt
meine-mum.sh:
Nebengedanke:
Wegen der eventuellen Codezeichen im html-Text muß hier genau aufgepaßt und penibel gequotet werden,
das Script würde schließlich mit root-Rechten ausgeführt.
Ist der Gimmick des Welcome das Risiko wert?
@JonnyBravo -> shareA deaktivieren:
Reaktivieren:
Und mit Variabler:
Code: Alles auswählen
#!/bin/sh
sed -i "s@^welcometext=.*@welcometext=@" mumble-server.ini
egrep "^welcometext=" mumble-server.ini
# (wirklich geloescht!)
WELCOME='"<br />Welcome to this server running <b>Murmur</b>.<br />Enjoy your stay!<br />"'
echo "$WELCOME" # Durch die single-quotes werden auch die Quotes wiedergegeben.
# Einfügen als Variable:
sed -i "s@^welcometext=.*@welcometext=$WELCOME@" mumble-server.ini
egrep "^welcometext=" mumble-server.ini
Wegen der eventuellen Codezeichen im html-Text muß hier genau aufgepaßt und penibel gequotet werden,
das Script würde schließlich mit root-Rechten ausgeführt.
Ist der Gimmick des Welcome das Risiko wert?
@JonnyBravo
Speziell Dein Problem, anderer Ansatz, /etc/samba/smb.conf:JonnyBravo hat geschrieben: echo "Freigabe würde gelöscht"
Code: Alles auswählen
# shares :
include = /etc/samba/smb.conf.d/shareA.conf
include = /etc/samba/smb.conf.d/shareB.conf
include = /etc/samba/smb.conf.d/shareC.conf
Code: Alles auswählen
$ sed -i 's@^\(include.*shareA.conf\)@#\1@' smb.conf
$ cat smb.conf
# shares :
#include = /etc/samba/smb.conf.d/shareA.conf
include = /etc/samba/smb.conf.d/shareB.conf
include = /etc/samba/smb.conf.d/shareC.conf
Code: Alles auswählen
$ sed -i 's@^#\(include.*shareA.conf\)@\1@' smb.conf
(eventuell muß das "#" noch gequotet werden)
Code: Alles auswählen
$ VARA=shareB; sed -i "s@^\(include.*${VARA}\)@#\1@" smb.conf
$ VARA=shareB; sed -i "s@^#\(include.*${VARA}\)@\1@" smb.conf
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
- Beiträge: 7
- Registriert: 14.10.2010 22:26:25
- Wohnort: Radebeul
Re: Sed befehl benötigt
herzlichen danke @rendegast , auf diese simple Lösung bin ich ehrlich gesagt nicht gekommen .. werde deinen Ansatz in die tat umsetzen ..danke ....
so hab jetzt angefangen um zubauen ...
das auskommentieren des include ist nicht möglich mit einer variable
auch mir "'#" nicht
anbei mal die Funktion vllt. gibt es ja auch da einen Fehler nicht lachen bin Anfänger kein Senior.
bedenke es ist noch lange nicht fertig ....
so hab jetzt angefangen um zubauen ...
das auskommentieren des include ist nicht möglich mit einer variable
auch mir "'#" nicht
Code: Alles auswählen
$ VARA=shareB; sed -i "s@^#\(include.*${VARA}\)@\1@" smb.conf
Code: Alles auswählen
ask(){
smb=/etc/samba
printf "Wie heißt die freigabe : "
read name
if ls $smb |grep $name >> /dev/null
then
echo "Diese freigabe existiert schon"
printf "Was möchten Sie tun \n"
select frei in "Freigeben" "sperren" "nichts"
do
case $frei in
freigeben) sed -i "s@^"#"\(include.*${name}*\)@\1@" $smb/smb.conf;;
sperren)if sed -i "s@^\(include.*${name}*\)@#\1@" $smb/smb.conf
then
echo "freigabe würde gesperrt "
else
echo "nicht möglich"
fi
;;
nichts)break ;;
esac
done
else
echo "wird erstellt"
printf "[$name]\n" >> $smb/$name.conf
echo "include = /etc/samba/$name.conf" >> $smb/smb.conf
printf "Gib bitte ein kommentar für das Verzeichniss an z.B geschäftlich,privat : "
read commn
echo "comment = $commn" >> $smb/$name.conf
printf "In welchen verzeichniss liegt die Freigabe z.B /home/root/dokumente :"
read wo
echo "path = $wo" >> $smb/$name.conf
printf "sollen nur bestimmt User oder gruppen zugriff haben bei nein haben alle rwx ? j|n (bei nein bekommen alle zurgriff): "
read zu
if [ $zu = "j" ]
then
select group in "gruppen" "User" "User sperren" "gruppe sperren" "end"
do
case $group in
gruppe);;
User) printf "Wie heißt der User \n(User bitte mit script anlegen da dieses denn unix und samba benutzer anlegt)\n Name :"
read unixname
if grep $unixname $smb/$name.conf
then
echo "dieser User hat bereits eine freigabe"
else
echo "wird erstellt"
echo "valid user = $unixname" >> $smb/$name.conf
fi
;;
"User sperren");;
"gruppe sperren");;
end);;
esac
done
else
echo "n"
fi
fi
}
Re: Sed befehl benötigt
JonnyBravo hat geschrieben:das auskommentieren des include ist nicht möglich mit einer variable
auch mir "'#" nichtCode: Alles auswählen
$ VARA=shareB; sed -i "s@^#\(include.*${VARA}\)@\1@" smb.conf
Ist das Single-Quote da nur reingerutscht?"'#" nicht
Weiß nicht recht was Du meinst, da der Ausdruck funktioniert.
(Wegen des "$" vor VARA, ich habe das als normaler Benutzer auf eine beliebige Testdatei smb.conf angewendet,
sollte damit die /etc/samba/smb.conf bearbeitet werden, sind root-Rechte nötig,
zudem hinterher wohl auch ein '/etc/init.d/samba reload'.)
Oder ist das auf die Funktion ask() bezogen?
"Freigeben" <-> freigeben)Code: Alles auswählen
select frei in "Freigeben" "sperren" "nichts" do case $frei in freigeben) sed -i "s@^"#"\(include.*${name}*\)@\1@" $smb/smb.conf;;
und
Code: Alles auswählen
sed -i "s@^"#"\(include.*${name}*\)@\1@" $smb/smb.conf
aber nach mehreren Versuchen ist das für dieses Zeichen im sed-Ausdruck wohl nicht nötig, weder im ersten noch im zweiten Teil.
(erster/zweiter Teil wegen: In einem "s@...@...@" muß im ersten Teil meiner Erfahrung nach saubereres Regex geschrieben werden, der zweite Teil verhält sich dagegen toleranter)
Mehr noch könnte es hier den sed-Ausdruck sogar unterbrechen,
so wird es zumindest im Syntaxhighlighting von vim und mcedit angezeigt.
"gruppen" <-> gruppe)Code: Alles auswählen
select group in "gruppen" "User" "User sperren" "gruppe sperren" "end" do case $group in gruppe);;
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
- Beiträge: 7
- Registriert: 14.10.2010 22:26:25
- Wohnort: Radebeul
Re: Sed befehl benötigt
Ich entschuldige mich , das Problem lag an der case freigabe);; ich hatte es im selectieren groß geschrieben
wenn ich wieder vor einen sed Befehl stehe werde ich mich nochmal melden ... (was in diesen script wohl häufiger auftritt )
Danke
wenn ich wieder vor einen sed Befehl stehe werde ich mich nochmal melden ... (was in diesen script wohl häufiger auftritt )
Danke