[SED] Dateimarke mit Dateiinhalt ersetzen.
Hallo zusammen,
ich habe hier ein Problem, wo ich nicht weiterkomme.
Ich bin gerade dabei Webmin für SuSE Linux Beta1 zu schnüren und muß
dafür die SPEC-Datei des originalen src.rpm ein wenig ändern, um
SuSE-kompatibel zu sein. Hier ist der betreffende Teil:
<schnippsel>
echo "Inserting Mail to root within %post right before %preun"
echo "using the data of mail_to_root.txt in this directory"
mailtoroot="$(< mail_to_root.txt)"
echo "${mailtoroot}"
sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 >
webmin-${version}.stage04
echo "${mailtoroot}"
</schnippsel>
Ich möchte also den Inhalt einer Datei auslesen und dann eine Dateimarke
mit dem Inhalt ersetzen. In diesem Falle halt eine eMail an root nach
erfolgreicher Installation. Meine Dateimarke heißt hier "%preun" und
aus der Textdatei wird weiterer Code an diese Stelle eingefügt ...
< cat mail_to_root.txt >
mail -s "Webmin properly installed" root <
Martin Mewes wrote:
sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 >
Ich kann jedoch machen, was ich will: Die Variable ${mailtoroot} nimmt via cat den Inhalt entgegen, aber das sed schreibt ${mailtoroot} an die entsprechende Stelle, sprich der Inhalt selbst wird nicht expandiert.
Die einfachen Anführungszeichen der Shell expandieren keine Variablen. Nimm dafür mal die doppelten Anführungszeichen sed -e "s/\%preun/${mailtoroot}/g" webmin-${version}.stage03 > Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply (@) japantest (.) homelinux (.) com
Hallo Sandy,
Sandy Drobic
Martin Mewes wrote:
sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 > sed -e "s/\%preun/${mailtoroot}/g" webmin-${version}.stage03 >
Deine Zeile ergibt ... sed: -e expression #1, char 56: unterminated `s' command bis dahin/kind regards Martin Mewes -- Richtiges Zitieren in Mailinglisten und Newsgroups -> http://www.afaik.de/usenet/faq/zitieren/
Martin Mewes schrieb:
Hallo zusammen,
ich habe hier ein Problem, wo ich nicht weiterkomme.
Ich bin gerade dabei Webmin für SuSE Linux Beta1 zu schnüren und muß dafür die SPEC-Datei des originalen src.rpm ein wenig ändern, um SuSE-kompatibel zu sein. Hier ist der betreffende Teil:
<schnippsel> echo "Inserting Mail to root within %post right before %preun" echo "using the data of mail_to_root.txt in this directory" mailtoroot="$(< mail_to_root.txt)" echo "${mailtoroot}" sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 > webmin-${version}.stage04 echo "${mailtoroot}" </schnippsel>
Ich möchte also den Inhalt einer Datei auslesen und dann eine Dateimarke mit dem Inhalt ersetzen. In diesem Falle halt eine eMail an root nach erfolgreicher Installation. Meine Dateimarke heißt hier "%preun" und aus der Textdatei wird weiterer Code an diese Stelle eingefügt ...
< cat mail_to_root.txt > mail -s "Webmin properly installed" root <
%preun cat mail_to_root.txt >
... so daß das SPEC-File wieder sein %preun hat.
Ich kann jedoch machen, was ich will: Die Variable ${mailtoroot} nimmt via cat den Inhalt entgegen, aber das sed schreibt ${mailtoroot} an die
Ist ja auch klar, denk doch mal drüber nach, welche Bedeutung ' in der Shell hat. Wenn Du das weisst, wirst Du " statt ' nehmen ;) Das kannst Du in diesem Fall machen, weil in der Expression keine weiteren, von der Shell interpretierte Zeichen sind. Würdest Du nach z.B: %preun$, also %preun am Zeilenende, suchen, ginge das so nicht, weil die Shell nach $ einen Variablennamen erwartet. Dann wäre sed -e 's/\%preun/'${mailtoroot}'/g' nötig. -- Gruss Bernd
Hallo,
Bernd Obermayr
Martin Mewes schrieb:
sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 >
Ist ja auch klar, denk doch mal drüber nach, welche Bedeutung ' in der Shell hat. Wenn Du das weisst, wirst Du " statt ' nehmen ;)
Siehe eine Mail oben: sed: -e expression #1, char 56: unterminated `s' command
Das kannst Du in diesem Fall machen, weil in der Expression keine weiteren, von der Shell interpretierte Zeichen sind. Würdest Du nach z.B: %preun$, also %preun am Zeilenende, suchen, ginge das so nicht, weil die Shell nach $ einen Variablennamen erwartet. Dann wäre sed -e 's/\%preun/'${mailtoroot}'/g' nötig.
Testweise -> ergibt: sed: -e expression #1, char 14: unterminated `s' command bis dahin/kind regards Martin Mewes -- Sicherheitsmeldungen fuer SuSE Linux bekommt man hier: suse-security-announce@suse.com
Hi Martin, Am Freitag, 12. August 2005 12.28 schrieb Martin Mewes:
Hallo,
Bernd Obermayr
wrote : Martin Mewes schrieb:
sed -e 's/\%preun/${mailtoroot}/g' webmin-${version}.stage03 >
Ist ja auch klar, denk doch mal drüber nach, welche Bedeutung ' in der Shell hat. Wenn Du das weisst, wirst Du " statt ' nehmen ;)
Siehe eine Mail oben: sed: -e expression #1, char 56: unterminated `s' command
Das kannst Du in diesem Fall machen, weil in der Expression keine weiteren, von der Shell interpretierte Zeichen sind. Würdest Du nach z.B: %preun$, also %preun am Zeilenende, suchen, ginge das so nicht, weil die Shell nach $ einen Variablennamen erwartet. Dann wäre sed -e 's/\%preun/'${mailtoroot}'/g' nötig.
Testweise -> ergibt: sed: -e expression #1, char 14: unterminated `s' command
bis dahin/kind regards
Martin Mewes
-- Sicherheitsmeldungen fuer SuSE Linux bekommt man hier: suse-security-announce@suse.com Was steht denn in der Datei, aus der Du den Inhalt der Variablen nimmst? Kommen Slashes "/" oder dergleichen darin vor? Diese müssten dann nämlich zuerst in \/ umgewandelt werden.
Gruss Werner
Hallo,
Werner Merz
Was steht denn in der Datei, aus der Du den Inhalt der Variablen nimmst? Kommen Slashes "/" oder dergleichen darin vor? Diese müssten dann nämlich zuerst in \/ umgewandelt werden.
Daran habe ich sogar gedacht <stolz> :-)
Aber
mail \-s \"Webmin properly installed\" root \<\
Hallo, Am Fri, 12 Aug 2005, Martin Mewes schrieb:
Ist zwar selten dämtlich (irgendwie) aber es funktioniert. Wenn jemand jedoch was lesbares, sprich meine Textdatei ist lesbar, dafür wird der sed-Aufruf kryptisch, hat, dann wäre ich sehr verbunden.
sed -e '/%preun/{rmail_to_root.txt d;}' webmin-${version}.stage03 > webmin-${version}.stage04 Der Zeilenumbruch hinter dem rDATEINAME ist bei meinem sed obligatorisch. Wenn du das %preun in der mail_to_root.txt weglaesst wird's noch einfacher: sed -e '/%preun/rmail_to_root.txt' \ webmin-${version}.stage03 > webmin-${version}.stage04 HTH, -dnh -- "`Ford, you're turning into a penguin. Stop it.'" -THHGTTG
participants (5)
-
Bernd Obermayr
-
David Haller
-
Martin Mewes
-
Sandy Drobic
-
Werner Merz