BASH -> Miert nyirja le a szoveg felet a sed?
- 1021 megtekintés
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..?:)
- A hozzászóláshoz be kell jelentkezni
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]
- A hozzászóláshoz be kell jelentkezni
[quote:3126c5fca3="WoOh"]
[code:1:3126c5fca3]
sed -e 's/'$mit'/'$mire'/'
[/code:1:3126c5fca3]
Jól van ez escapelve?
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
[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]
- A hozzászóláshoz be kell jelentkezni
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. :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
[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
- A hozzászóláshoz be kell jelentkezni