Suchen und ersetzen in HTML Dokumenten

J

JoeDormann

Grünschnabel
Hallo,

ich habe schon viel gesucht hier, aber ich komme nicht weiter.
Ich möchte in beliebigem html Inhalt einen Platzhalter §§§§§§§§ ersetzen durch einen anderen Text.

Betreffender Ausschnitt ::

Code:
echo "start html"
# lese liste von namen aus datei in variable v3 inhalt "huge ernst maria toto"
read v3 < $thisdir/$filename.Live.Data.cut.sort.uniq
dirgraph="/home/user1/www/@graph"
#lese header
read z1txt < $dirgraph/z1.txt
#erzeuge  4 mal body part, ersetze und immer in die gleiche variable zurückspeichern
for i3 in ${v3[@]}; do
    read z2Ltxt < $dirgraph/z2L.txt
    $z2Ltxt="$z2Ltxt"$(echo $z2Ltxt | sed -e -r '/§§§§§§§§/${i3}/')
done
#footer parts
read z3txt < $dirgraph/z3.txt
read z4txt < $dirgraph/z4.txt
#zusammenbauen und ausgeben
aus="$z1txt $z2Ltxt $z3txt $z4txt"
echo "$aus" >> "$hisdir/indexL.html"
echo "end html"
Die Html-Texte wurden sauber eingelesen.
Offensichtlich scheitert sed, da die zeichen < > der tags zur umleitung für einlesen und ausgabe benutzt werden.
Der output in eine neue html Datei klappt so noch nicht.

Vielleicht sind auch noch mehr fehlerhafte Sachen in dem Scriptpart.

Ich würde mich über etwas Hilfe freuen.
Gruß Joe
 
Zuletzt bearbeitet:
sed nimmt als Kommandozeilenargument die Datei, die editiert werden soll, versuch das ganze also erstmal ohne 'echo'. Wenn Du die Datei selber ersetzen moechtest, kannst Du bei GNU sed auch die Option -i verwenden, dann werden die Aenderungen direkt in die editierte Datei geschrieben.
P.S.: Es gibt 'code'-Tags zum Posten, mit denen Dein Beitrag deutlich angenehmer zu lesen ist.
Code:
 Text in Code-tags
 
sed nimmt als Kommandozeilenargument die Datei, die editiert werden soll, versuch das ganze also erstmal ohne 'echo'. Wenn Du die Datei selber ersetzen moechtest, kannst Du bei GNU sed auch die Option -i verwenden, dann werden die Aenderungen direkt in die editierte Datei geschrieben.
P.S.: Es gibt 'code'-Tags zum Posten, mit denen Dein Beitrag deutlich angenehmer zu lesen ist.

Hallo,
vielen Dank erstmal.
Nur mal sicherheitshalber nachgefragt. Folgere ich richtig, das sed keine Ersetzungen in mittels einer Variable, in der sich der html-code befindet, machen kann?
Welche Alternative gäbe es, um das Problem zu lösen, und dabei nicht das Filesystem zu bemühen?
Ich habe sed erst benutzt, als ich zuvor mit awk auch nicht weitergekommen bin.

Gruß Joe
 
Hi,

auf den ersten Blick sieht das für mich so aus, als ob dein Skript laufen könnte, wenn du nur die einfachen Quotes (') durch doppelte (") ersetzt; die Shell interpretiert innerhalb der Single Quotes keine Variablen, die '<' und '>'-Zeichen haben damit nichts zu tun.

Hat das eigentlich einen besonderen Grund, dass du die ganzen Teile erst in Variablen zwischenspeicherst anstatt sie direkt auszugeben?

Eigentlich sollte das Ganze auch so in etwa schon funktionieren:

Code:
dirgraph="/home/user1/www/@graph"
(
    cat $dirgraph/z1.txt
    for i3 in $(<$thisdir/$filename.Live.Data.cut.sort.uniq); do
        sed -e "/§§§§§§§§/$i3/") < $dirgraph/z2L.txt
    done
    cat $dirgraph/z3.txt
    cat $dirgraph/z4.txt
) >> "$hisdir/indexL.html"

(Hoffe, die Verwendung von unterschiedlichen Variablen - einmal $thisdir und danach dann $hisdir - ist so gewollt ...)

Gruss,
A.
 
Hi,

auf den ersten Blick sieht das für mich so aus, als ob dein Skript laufen könnte, wenn du nur die einfachen Quotes (') durch doppelte (") ersetzt; die Shell interpretiert innerhalb der Single Quotes keine Variablen, die '<' und '>'-Zeichen haben damit nichts zu tun.

Hat das eigentlich einen besonderen Grund, dass du die ganzen Teile erst in Variablen zwischenspeicherst anstatt sie direkt auszugeben?

Eigentlich sollte das Ganze auch so in etwa schon funktionieren:

Code:
dirgraph="/home/user1/www/@graph"
(
    cat $dirgraph/z1.txt
    for i3 in $(<$thisdir/$filename.Live.Data.cut.sort.uniq); do
        sed -e "/§§§§§§§§/$i3/") < $dirgraph/z2L.txt
    done
    cat $dirgraph/z3.txt
    cat $dirgraph/z4.txt
) >> "$hisdir/indexL.html"

(Hoffe, die Verwendung von unterschiedlichen Variablen - einmal $thisdir und danach dann $hisdir - ist so gewollt ...)

Gruss,
A.

Hallo und Dank,

ja es funktioniert super,
nachdem ich noch eine Stunde gesucht habe und darauf kam, das ein "s" fehlte und die Klammer ) weg war.

sed -e "s/§§§§§§§§/$i3/" < $dirgraph/z2L.txt

So gings dann.

Danke nochmal,
Joe

Thema kann geschlossen werden.
 
Zuletzt bearbeitet:

Ähnliche Themen

CGI laesst sich nicht ausfuehren

Zurück
Oben