Portaal Portaal Pingviini veeb foorumi pealeht
  Viki  |  IRC  |  Otsing  |  Küsimused ja vastused  |  Profiil  |  Privaatsõnumite vaatamiseks logi sisse  | Logi sisse või Registreeru
<empty>
Vaata järgmist teemat
Vaata eelmist teemat

Postita uus teemaVasta teemale
Autor Sõnum
zeroconf
Vana Pingviin
Vana Pingviin



Liitunud: 31.03.2007
Postitused: 1065


blank.gif
postituspostitatud: 06.08.2007, 22:53  postituse pealkiri:  kuidas hulgi teksti asendada erinevates failides?  

On kaustad, igas kaustas on fail ~/v1/cmsimple/config.php.....~/v840/cmsimple/config.php ja seal failis tuleb asendada teema nimi selle kataloogi nimega, mis on ~/v1/templates/ sees.
Selle faili v1/cmsimple/config.php neljas rida on selline:
$cf['site']['template']="subsilverlike";

Seal tuleb see jutumärkide vahel olev nimetus (siin praegu subsilverlike) asendada siis selle kataloogi nimega, mis leitakse ~/v1/templates/ olevat.

Varasem skript jagas teemad ära ent need ei muutu enne aktiivseks kui seadefailis seda öeldud on.

Suutsin niipalju teha, et tekitasin ühe skriptiga tekstifaili, kus need mallide kaustade nimed üksteise all. Kui nüüd saaks need nimed igaüks vastava versiooni config.php faili... Aga lihtsam on vist otse teha kui mingit vahefaili kasutada.

Mõned viited olen leidnud:
http://www.webhostingtalk.com/showthread.php?t=545248
http://www.linuxquestions.org/questions/showthread.php?t=212983
http://www.linuxquestions.org/questions/showthread.php?t=278332
... ja olen aru saanud, et sed, awk vms. on selleks mõeldud... Ent seni ei ole miskit töötavat skripti suutnud välja mõelda selle analoogia põhjal...

isegi sed 's/vana_nimi/uus_nimi/' <config.php >config.php ei tööta. Fail config.php on tühi peale seda....


priit
Vana Pingviin
Vana Pingviin


Vanus: 39
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
estonia.gif
postituspostitatud: 06.08.2007, 22:59  postituse pealkiri:  Re: kuidas hulgi teksti asendada erinevates failides?  

zeroconf kirjutas:
isegi sed 's/vana_nimi/uus_nimi/' <config.php >config.php ei tööta. Fail config.php on tühi peale seda....


Kood:
perl -pi'*.bak' -e 's/vana_nimi/uus_nimi/' config.php


Asendab teeb ÜHE korra asenduse vana_nimi => uus_nimi, kui kõiki on vaja, siis

Kood:
perl -pi'*.bak' -e 's/vana_nimi/uus_nimi/g' config.php


Internet aitab.

sed töötab ka :)

Kood:
sed -i config.php -e 's/vana_nimi/uus_nimi/'


st lihtsalt käsurealt sed'i käivitades tegeleb ta stdin-iga, faili jaoks on vaja kasutada võtit -i (edit files in place).




Viimati muutis priit 06.08.2007, 23:05; muudetud 2 korda
Hardi

Pingviini aktivist
Pingviini aktivist


Vanus: 47
Liitunud: 31.10.2005
Postitused: 153

Distributsioon: Arch64
estonia.gif
postituspostitatud: 06.08.2007, 23:03  postituse pealkiri:  (teema puudub)  

sed -i "4c\uus_nimi" /bath/failinimi

vahetab teksti faili 4-ndal real


zeroconf
Vana Pingviin
Vana Pingviin



Liitunud: 31.03.2007
Postitused: 1065


blank.gif
postituspostitatud: 06.08.2007, 23:41  postituse pealkiri:  (teema puudub)  

Hardi kirjutas:
sed -i "4c\uus_nimi" /bath/failinimi

vahetab teksti faili 4-ndal real


ei ole vaja kogu teksti vaid ainult jutumärkide vahel olev tekst asendada kataloogi nimega, mis ~/v1/cmsimple/templates/ kaustast leitakse:
$cf['site']['template']="subsilverlike";

... ja seda on vaja 840 korda teha, iga kord on kataloogi nimi erinev (v1....v840).

Kuidas teha nii, et sed'ile ei peaks ette andma "vana_nimi" vaid saaks anda nii, et mida ta sealt ~/v1/cmsimple/config.php failis 4-ndalt realt jutumärkidest leiab, seda võtkugi vana nimena. Ja uue nimena võtku seda, mis leitakse kataloogi nimi olevat ~/v1/cmsimple/templates/ kaustas

Hädapärast panna "uus_nimi" väärtuseks ka:
$cf['site']['template']="`ls ~/v1/cmsimple/templates/`";


Üritasin sellist skripti rakendada:
Kood:

#!/bin/sh
cms_asukoht="/kataloog/kus/asub/840_kataloogi"
var=1
until [ $var1 -ge $1 ]
do
sed -i "4c\$cf['site']['template']="`ls $cms_asukoht/v$var/cmsimple/templates`";" $cms_asukoht/v$var/cmsimple/config.php
((var1+=1))
done


kuid veateateks tuleb:
Kood:

line 4: [: -ge: unary operator expected
ls: /kataloog/kus/asub/840_kataloogi/v1/cmsimple/templates: No such file or directory

.... kuigi selline kaust (/cmsimple/templates) on täiesti olemas...

Lahendasin hetkel asja "kirvemeetodil":
1) tekitasin kataloogide nimekirja üksteise alla, kirjutades alltoodud read bashi skripti:
ls v1/templates/ > mallide_nimed.txt
ls v2/templates/ >> mallide_nimed.txt
.....
ls v840/templates/ >> mallide_nimed.txt

Kusjuures need read sain nii, et tekitasin OOo Calc'is mitu veergu selliselt, et number oli eraldi veerg. Siis andsin sammu ette (1,2) paljundasin seeria alla 840 reani. Siis CONCATENATE funktsiooniga liitsin taas kokku tagasi ja sellegi valemi paljundasin topeltklõpsuga lahtri alumisel paremnurgal alla 840 rea võrra. Siis kopeerisin saadud read bashi skripti, salvestasin, käivitasin ja oligi fail mallide nimedega olemas.
Siis kopeerisin saadud kataloogide nimed taas Calc-i ühte veergu ülevalt alla.

2) sama tehnikaga rakendasin rida:
sed -i /kataloog/kus/asub/840_kataloogi/v1/cmsimple/config.php -e 's/vana_nimi/uus_nimi/'
...
sed -i /kataloog/kus/asub/840_kataloogi/v840/cmsimple/config.php -e 's/vana_nimi/uus_nimi/'

... kus uus nimi oli Calc'i kopeeritud mallide nime lahtrist lihtsalt võrdusmärgiga viidatud. Taas CONCATENATE abil see rida kokku, skripti, käima ja oligi olemas.

Seal kus oli nimi juba muudetud - sealt seda "vana_nimi" enam ei leitud ja ilmselt siis ka midagi ei muudetud. Kindlasti saaks miski andeka skripti kirjutada, mis selle korraga ära teeks aga minu vägi sellele praegu peale ei hakanud kuigi uurisin neid juhendeid. Liiga palju uut infot, mida juurde lugeda enne kui üldse midagi juhtuma hakkab. Kui ei ole ikka progeja siis on keeruline nendest laias netis olevatest õpetustest aru saada, mis sageli suhteliselt lakoonilised on.


priit
Vana Pingviin
Vana Pingviin


Vanus: 39
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
estonia.gif
postituspostitatud: 07.08.2007, 00:47  postituse pealkiri:  (teema puudub)  

Katsetasin natuke, vajaliku töö sain tehtud järgmise skriptiga (kaustade asukohad olid mul natuke teised, rida oli ka kuues, mitte neljas):

Kood:
#!/bin/bash
cms="/home/priit/test"
for i in `seq 1 840`
do
newtpl="`ls $cms/v$i/templates`"
sed 6c\$cf[\'site\'][\'template\']=\"$newtpl\" -i $cms/v$i/config.php
done


zeroconf
Vana Pingviin
Vana Pingviin



Liitunud: 31.03.2007
Postitused: 1065


blank.gif
postituspostitatud: 07.08.2007, 01:41  postituse pealkiri:  (teema puudub)  

priit kirjutas:
Katsetasin natuke, vajaliku töö sain tehtud järgmise skriptiga (kaustade asukohad olid mul natuke teised, rida oli ka kuues, mitte neljas)
done[/code]


Super - asi tõepoolest töötas! Ma katsetasin seda 5 CM Simple kausta peal ja toimis täiuslikult. Samuti selgus tähelepanelikul vaatlemisel, et soovitud rida oli viies. Veel selgus testimisel, et semikoolon oli puudu - kui seda ei ole siis veebileht ei tööta.

Kate abiga reanumbrid sisse lülitades sai selguse majja. Ühtlasi sain ka aru, et osaliselt on keeruline rida asendada - lihtsam on terve rida soovituga asendada.

Minu testitud versioon siis selline:
Kood:

#!/bin/bash
cms="/kataloog/kus/asuvad/CMS-i_kataloogid"
for i in `seq 1 5`
do
newtpl="`ls $cms/v$i/templates`"
sed 5c\$cf[\'site\'][\'template\']=\"$newtpl\"\; -i $cms/v$i/cmsimple/config.php
done


Kas see muutuja "newtpl" on suvaliselt valitud? Et näiteks vajadusel saaks "newtpl2" jne. valida...

Teistele lugemiseks - käesolev teema sai alguse siit - http://pingviin.org/viewtopic.php?t=3352 kuid siis tekkis uus vajadus ja selle kohta siis see haru siin.


priit
Vana Pingviin
Vana Pingviin


Vanus: 39
Liitunud: 04.08.2005
Postitused: 521
Asukoht: Tartu
Distributsioon: CentOS / OS X
estonia.gif
postituspostitatud: 07.08.2007, 08:03  postituse pealkiri:  (teema puudub)  

zeroconf kirjutas:

Minu testitud versioon siis selline:
Kood:

#!/bin/bash
cms="/kataloog/kus/asuvad/CMS-i_kataloogid"
for i in `seq 1 5`
do
newtpl="`ls $cms/v$i/templates`"
sed 5c\$cf[\'site\'][\'template\']=\"$newtpl\"\; -i $cms/v$i/cmsimple/config.php
done


Kas see muutuja "newtpl" on suvaliselt valitud? Et näiteks vajadusel saaks "newtpl2" jne. valida...

Teistele lugemiseks - käesolev teema sai alguse siit - http://pingviin.org/viewtopic.php?t=3352 kuid siis tekkis uus vajadus ja selle kohta siis see haru siin.


Jah, newtpl on suvaliselt valitud nimi. V6id newtpl asemel suvalist muutuja nime kasutada.


Näita (aja järgi):      
Postita uus teemaVasta teemale


Vaata järgmist teemat
Vaata eelmist teemat
Powered by phpBB2 Plus based on phpBB © 2001/7 phpBB Group