In eine Datei den Dateiname reinschreiben

M

muemmi

Eroberer
Hi

Ich würde gerne in eine Textdatei die mit HTML-Befehlen gefüllt ist den Dateinamen noch reinschreiben.

optimal wäre es wenn er die letzt zeile davor löschen würde

denn das steht ja die schluss sequenz drin

</ body></ html>

Könnte mir einer helfen

Ich denke mir das so

ein open... gehe zum ende... werfe zeile raus... schreiben neuen text rein und speichern

Liebe Grüße

Frank
 
jain

im Prinzip wird eine Datei erzeugt von meinem system in ascii. ich habe halt um die Texte HTML Befehle dazugeschrieben um sie zu formatieren.

diese Datei schicke ich über einem PDF erzeuger

dann habe ich ein hübsches produktzertifikat

diese werden für den Kunden abgelegt und damit er sie wieder findet wäre es schön wenn der name der Datei drin ständ

den Dateinamen hab ich schon in einer variablen

und mit man komme ich nicht sonderlich zurecht, da ich unix (linux) zu wenig nutze

Liebe Grüße

Frank
 
Hi,

meinst Du in dieser Richtung (mit GNU sed)?
Code:
sed -i "/^[ \t]*<\/[ \t]*body>/i$dateivariable" htmlfile

Damit fügt sed innerhalb der Datei htmlfile vor alle Vorkommnisse des Suchmusters ^[ \t]*<\/[ \t]*body> den Inhalt der $dateivariablen ein. Da '</body>' ja nur einmal in einem HTML-Dokument auftauchen sollte, dürfte es damit auch keine Probleme wegen mehrfachen Änderungen geben.

Das Suchmuster könnte im einfacheren oder gar einfachsten Fall auch <\/body> sein - die Musterangaben von [ \t]* z. B. berücksichtigen lediglich noch evtl. vorkommende Whitespaces oder Tabulatoren.

Gruß Daniel
 
das hört sich prima an und 75% davon habe ich verstanden. wenn du mir eine freude machen möchtest erklärte mir doch dieses Suchmuster

^[ \t]*<\/[ \t]*body>

was bewirken diese zeichen

Liebe Grüße

ps: lass dir aber zeit

ich mach jetzt feierabend morgen geht es weiter !
 
Hi,

die verwendeten reguläre Ausdrücke sind:
Code:
[b]^[/b]         -> Anfang der Zeile
[b][ \t][/b]     -> "blank" und Tabulator
[b]*[/b]         -> kein oder beliebig oftes Vorkommen des vorherigen Zeichens (blank oder Tab)
[b]\/[/b]        -> ein entwerteter Slash, da dieser an sich im verwendeten sed-Befehl eine steuernde Funktion (Feldtrenner) besitzt. (es kann aber beinahe jedes beliebige Zeichen dazu verwendet werden)
Der Rest ist die normale Zeichenfolge "<body>"

Es gibt im Netz unmengen an Informationen zu Regulären Ausdrücken, welche für die (Shell-, Perl-, PHP-, C++-, etc.)Programmierung meiner Meinung nach einen der wichtigsten Teile ausmachen.

Gruß Daniel
 
Zuletzt bearbeitet:
hmmmm

klappt nicht

das -i gibt es gar nicht das heißt -e

wenn ich das beispiel von der man page nutze kommt das

$ sed -e 'a\^Jhupps' qsp/test.lis
sed: "\" must terminate the "a" command

und bevor einer meckert (wie es mir schon mal passiert ist hier)
ich nutze eine Unix shell (MKS) und ich muß das...

ich mach das nicht freiwillig

hier der link von der man-page von dem SED

ich raff das nicht

Liebe grüße

Frank
 
Hi,

Deswegen von mir auch gleich der Hinweis auf GNU-sed in meinem Beitrag ;-)
Aber die GNU-sed-typische in-place Verarbeitung (-i) läßt sich alternativ dann eben mit separaten Input- und Outputfiles lösen:

Code:
sed "/^[ \t]*<\/[ \t]*body>/i$dateivariable" old_htmlfile > new_htmlfile

Ich sehe keine Link zu "Deiner" manpage.
Hier die Unterschiedlichen manpages von UNIX-sed und GNU-sed.
 
Hm, bei meinem GNU sed geht's. Jetzt solltest Du herausfinden woran es genau hakt (alte sed-Version? Gibt es für Dein System eine Aktualisierung? man-pages oder andere Infoseiten).

Da er den Backslash grundsätzlich anmeckert, teste mal einfachere Versionen wie z. B.:
Code:
echo -e "test1\ntest2\ntest3" | sed '/test2/itest1,5'

Das sollte (hoffentlich) zumindest funktionieren. Vielleicht braucht Dein sed auch tatsächlich den -e Schalter, um \-Notationen zu verarbeiten.

Gruß Daniel
 
ich hab übrigens was ganz gemacht

ich hab die möglichkeit den /body wegzulassen

und habe mit diesem befehlen

echo "" >>$datroh
echo "" >>$datroh
echo " File: $datneu" >>$datroh
echo " </body></html>" >>$datroh

einfach das ans ende geschrieben

tut es

ich versuche es aber mal mit deinen

melde mich dazu am montag

grüße

frank
 

Ähnliche Themen

SED letzte Zeile löschen

[Tcl / Shell] Ändern einer Datei per vi - Änderungsdatum einer Datei erfassen

[HowTo] NVidia und 3D unter SuSE/openSUSE

Server-Monitoring mit RRDTool

Zurück
Oben