• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[ gelöst ] Script Frage

A

Anonymous

Gast
Hallo,

mit folgendem Script:

Code:
#!/bin/sh
BASE_URL="http://www.xyz.de/mapbender/php/mod_wmc2ol.php?wmc_id=5173"
ID="$1"
LOCAL_COPY="wmc__$ID.html"

# Original HTML_Datei herunterladen
wget -O "$LOCAL_COPY" "${BASE_URL}${ID}"

# Anpassungen vornehmen
cat "$LOCAL_COPY" | sed "s/#map{width:722px\;height:535px/#map{width:922px\;height:735px/" > "$LOCAL_COPY.1"
cat "$LOCAL_COPY.1" | sed "s/src='../src='http:\/\/www\.xyz\.de\/mapbender/" > "$LOCAL_COPY.2"

# Aufräumen
mv "$LOCAL_COPY.2" "$LOCAL_COPY"
rm "$LOCAL_COPY.1"
echo "Fertig: lokale Kopie mit Anpassungen in Datei $LOCAL_COPY."
hole ich mir vom Server ein WMC-Dokument im Format *.html.
In der *.html Datei ist die Größe des Kartenausschnittes mit:

Code:
#map{width:722px\;height:535px/
angegeben.

Die Größe des Kartenausschnittes ( 722 px / 535 px ) versuche ich mit der Codezeile:

Code:
# Anpassungen vornehmen
cat "$LOCAL_COPY" | sed "s/#map{width:722px\;height:535px/#map{width:100%\;height:100%/" > "$LOCAL_COPY.1"

im heruntergeladenen Dokument auf 100% / 100 % abzuändern.

Leider steht im heruntergeladenen Dokument weiterhin 722 px / 535 px .
Wo liegt der Fehler ?
 
Ich würde vermuten das sich sed an de Prozentzeichen stört und diese auch ge-quotet werden müßen. Aber ich hab von sed keine Ahnung, kann also auch etwas ganz anderes sein.
 
OP
A

Anonymous

Gast
Hallo,

Code:
# Anpassungen vornehmen
cat "$LOCAL_COPY" | sed "s/#map{width:722px\;height:535px/#map{width:100%\;height:100%/ g" > "$LOCAL_COPY.1"

bringt auch kein Ergebnis.
 

rolle

Guru
Ohne Leerzeichen? Und Du mußt noch sowohl den Backslash als auch das Semikolon maskieren:

Code:
roland@cipcbipc186:~> echo "#map{width:722px\;height:535px/" | sed "s/#map{width:722px\\\;height:535px/#map{width:100%\\\;height:100%/g"
#map{width:100%\;height:100%/

edith:
Nachtrag: Sieh Dir mal die Option -i von sed an, damit könntest Du ein paar Zeilen Deines Scriptes sparen.
 
OP
A

Anonymous

Gast
hallo,

hier ist die ORIGINAL Formatierung (css) aus dem heruntergeladenen HTML-Dokument.

Code:
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<style type='text/css'>
 #map {
width: 722px;
height: 535px;
border: 1px solid black;
overflow:visible;
}

Leider bringt auch der "neue" Code
Code:
cat "$LOCAL_COPY" | sed "s/#map{width:722px\\\;height:535px/#map{width:100%\\\;height:100%/g" > "$LOCAL_COPY.1"
keine Änderung. Es wird nicht 100% / 100 % in die heruntergeladene HTML-Datei geschrieben.
 

rolle

Guru
So, jetzt kommt Licht in die Sache. sed arbeitet zeilenbasiert, Du kannst also nicht eine newline einbauen. Für Deinen Zweck würde ich folgendes tun:
Code:
---snip---
cp $LOCAL_COPY $LOCAL_COPY.1
sed -i 's/width: 722px/width: 100%/g' LOCAL.COPY.1
sed -i 's/height: 535px/height: 100%/g' LOCAL.COPY.1
sed -i 's/src='../src='http:\/\/www\.xyz\.de\/mapbender/g' $LOCAL_COPY.1
---snap---
 
OP
A

Anonymous

Gast
So richtig blicke ich nicht durch was du da genau durch sed schicken willst. wenn es der "orginal Text" sein sollte.
Code:
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<style type='text/css'>
 #map {
width: 722px;
height: 535px;
border: 1px solid black;
overflow:visible;
dann versuche mal das hier
Code:
sed '/width/,+1s/[0-9]\+px/100%/'
das dürfte auch noch ein bischen universeller sein. da es auch andere Größen auf 100% ändern würde.

robi
 

RME

Advanced Hacker
Hallo,

Der zu editierende Code:

Code:
cat $LOCAL_COPY
...
width: 722px;
height: 535px;
...
Der sed code:

Code:
sed -i '/^width: 722px;$/{
N
s/\(width: \)722px\(;\nheight: \)535px;/\1100%\2100%;/
}
' $LOCAL_COPY
ergibt:

Code:
cat $LOCAL_COPY
...
width: 100%;
height: 100%;
...
Gruss,
Roland
 
OP
A

Anonymous

Gast
Hallo,

hier nach einigem basteln der Code, der funktioniert.

Code:
cat "$LOCAL_COPY" | sed '/#map/{;N;s/width: [0-9]\+px;/width:100%;/;N;s/height: [0-9]\+px;/height: 100%;/}' > "$LOCAL_COPY.1"

Alle (px) Angaben [0-9] werden in 100 % umgewandelt.

Nochmals vielen Dank an ALLE.
 
Oben