BASH -> Miert nyirja le a szoveg felet a sed?

BASH -> Miert nyirja le a szoveg felet a sed?

Hozzászólások

Hello.

Kis hattertortenet:

Adott egy php-s portalmotor, amit megirtam hurra hurra. Majd kaptam egy feladatot, h csinaljak meg egy html oldalt. Termeszetesen lusta vagyok html-t frissitgetni, de azon a tarhelyen nincs se pgsql se php, igy egy lehetoseg maradt: A php-s rendszeren at frissiteni, majd 1 scripttel az adott php-t lementeni, atnevezni HTML oldalakka es az A href= linkeket atirni mintha statikus lenne.. Mindez tok jo is. Elmeletben mukodik egeszen addig, amikor is at kene irni az <a href> tageket

van harom fajl, amibol dolgozik. Az egyik fajl:
[code:1:7596475eeb]
http://url/index.php?op=ez
http://url/index.php?op=az
http://url/index.php?op=amaz
http://url/index.php?op=salla
http://url/index.php?op=cucc
[/code:1:7596475eeb]
Az egyik tartalmaza az URL-eket, ahonnan letolti az fajlokat 1,2,3,4,5,6..n neven.

A masikban van a sed szamara, h mit keressen.

A harmadik fileban pedig az van, h a sed mire cserelje le a mintat. Ezt szepen betettem egy ciklusba.. majd a vegen atneveztem a kello nevure a filokat..

Viszont a problema az, h a HTML filokat lemetszi a vegen.... vagyis a negyedetol mar levagja oket.. a script igy fest: [code:1:7596475eeb]

#!/bin/sh
#
n=1
while read line
do
wget -O $n "$line"
(( n += 1 ))
done <url.txt

fajl=0
while read sorok
do
fajl=$(($fajl+1))
a=0
while read line
do
a=$(($a+1))
mit=$(cat op.txt | head -n $a | tail -1)
mire=$(cat html.txt | head -n $a | tail -1)
cat $fajl | sed -e 's/'$mit'/'$mire'/' > $fajl
done < op.txt
done < op.txt

n=$(($n-1))
a=0
while read cucc
do
a=$(($a+1))
echo "$a --> $cucc"
mv $a $cucc
done < html.txt

echo 'Done' [/code:1:7596475eeb]

Tehat az eleje es a vege tok okes... a kozepen halodik meg a dolog a sed-nel.. mit rontok el?
A sed kimenetenel lehet a problema. Az output-t a $fajl -ba iranyotom. Lehet, h nem fer el a valtozoban annyi szoveg? Mert minden fajlban pontosan ugyan ott vagja le es azonos meretuek lesznek a fajlok... Remelem valaki tud segiteni. :

Koszi.

ui.: Ha kiszedem belole a kozepso reszt, akkor tok jol lefut, vagyis tenyleg _csak_ a sed-es resszel vannak problemaim... de miert nem megy..?:)

Hello,

Csak egy tipp: én itt
[code:1:a3eaea5730]
cat $fajl | sed -e 's/'$mit'/'$mire'/' > $fajl
[/code:1:a3eaea5730]
használnék egy átmeneti file-t, mert nem tudom mi a dokumentált viselkedése annak, hogy módosítjuk a file-t, miközben olvassuk.
Pl így:
[code:1:a3eaea5730]
cat $fajl | sed -e 's/'$mit'/'$mire'/' > /tmp/xxx
mv /tmp/xxx $fajl
[/code:1:a3eaea5730]

[quote:3126c5fca3="WoOh"]
[code:1:3126c5fca3]
sed -e 's/'$mit'/'$mire'/'
[/code:1:3126c5fca3]

Jól van ez escapelve?

Igaza van radonak, nekem ilyen esetekben mindig törlődik a fájl tartalma, vagy legalábbis csonkul.

Ha már tempbe megy egy fájl, érdemes a $$-t is betenni a nevébe, hogy több folyamat ne vesszen össze a fájl nevén.

[code:1:72e2e861e9]
sed -e 's/'$mit'/'$mire'/'
[/code:1:72e2e861e9]

És ha van egy space a $mit vagy a $mire-ben?
Én így írnám:
[code:1:72e2e861e9]
sed -e "s/$mit/$mire/"
[/code:1:72e2e861e9]

Koszi rado

pontosan az volt a problema..:)

vidgabor: space nincs benne, mert azt 1 filebol szedi es a file meghatarozott tartalmu es nincsenek benne spacek, tabok stb, hanem csak url-ek, vagy space nelkuli stringek.. :)

Koszi meg 1x. :)

Tehat azert csonkul a $fajl valtozo tartalma, mert mint valtozo kezeli mint fajl es nem fer bele tobb ``anyag''?:)

Mindenesetre tokeletes megoldas a /tmp/asdf mv /tmp/asdf $falj. Habar tenyleg erdekelne, h miert nem mukodik siman > $fajl-al.

[quote:e0b63b6d75="WoOh"]Mindenesetre tokeletes megoldas a /tmp/asdf mv /tmp/asdf $falj. Habar tenyleg erdekelne, h miert nem mukodik siman > $fajl-al.

Mert a cat meg nem olvasta be a teljes fajlt, amikor a kimenet mar irja, megpedig 0-ra valo csonkolas utan. Erre azt latja a cat, hogy o mar tobbet olvasott mint a fajl merete, tehat ki kell lepni.
/GCS