[ dnenad @ 27.10.2007. 18:47 ] @
Molim Vas da li neko moze da mi pomogne kako treba da izgleda script koji ce u jednom fiksnom txt fajlu da uradi replace (tacke sa zarezom) na primer u brojevima u text fajlu.
Naravno na svim mestima u fajlu.
Script mi je potreban da bih ga postavio u batch fajl.
[ caiser @ 27.10.2007. 19:33 ] @
Npr.

Code:
$ cat file
1.2.3

$ perl -i -p -e 's/\./,/g' file

$ cat file
1,2,3
[ dnenad @ 27.10.2007. 19:50 ] @
Caiser hvala na odgovoru,

Molim Vas za jos malo pomoci.

Kako da pokrenem ovaj kod iz XP-ovog command prompta ili kako da ga snimim u cmd file.

Probao sam i jedno i drugo pa nesto ne ide.

Pretpostavljam da mi treba Cscript code ili moze i perl ali ja ne znam kako da ga pokrenem
[ Jbyn4e @ 27.10.2007. 21:31 ] @
Dnenad,
nema u linuxu uopste XP-ovog command prompta. Na pogresnom forumu pitas...
A sto se tice linux-a, ne mora perl, mogao je i npr. sed, awk...
[ random @ 30.10.2007. 01:07 ] @
Forum za pitanje je dobar, samo što je nelogično postavljen kao podforum Linux foruma. Kao da se na BSD, Mac, Windows i drugim sistemima ne skriptuje.

Mislim da search/replace može da se postigne FOR komandom ugrađenom u cmd.exe. Ali pošto ne znam kako (pozaboravljao sam WinDOS shell), mogao bi neki Windows guru da se javi pa da demonstrira.

Ja bih prosto skinuo sa neta binarni sed.exe, spucao ga u %WINDIR% i zloupotrebio (sed '{ s/staro/novo/g }' fajl.txt > izlaz.txt) za ovu namenu :o).
[ uranium @ 30.10.2007. 01:46 ] @
Evo i mog predloga (trebalo bi da radi i na XP-u i na Linuxu):

Code:

tr , . < x1.txt > x2.txt


nakon toga ostaje da se odradi još samo
Code:

mv x2.txt x1.txt


pretpostavka je da su podaci koje hoces da promenis smesteni u x1.txt
[ Jbyn4e @ 30.10.2007. 19:09 ] @
Hm...

C:\>tr
'tr' is not recognized as an internal or external command,
operable program or batch file.


[ uranium @ 30.10.2007. 23:50 ] @
@Jbyn4e:

LOL, potpuno si u pravu, ispostavilo se da sam zaboravio da mi je instaliran msys... (a baš sam bio prijatno iznenađen kako mi je to prošlo ) ... evo šta mi je bilo u pathu


C:\Program Files\msys\1.0\bin\


U attachment-u je zipovan tr.exe [ mada nisam testirao da li može da radi izolovano ]...
Dakle, ostaje otvoreno pitanje kako to izvesti bez dodataka
[ uranium @ 31.10.2007. 03:19 ] @
Evo u attachmentu je jedan "tool" koji sam sklepao [ u stvari više proof of concept ]...
ako uopšte treba da naglašavam, skripta radi isključivo pod Windowsom [double click it...]
Naravno, svako ko je koristi to radi na sopstvenu odgovornost

u regEx modu setovani su /g i /m (/s nije podržan nažalost )


[ Jbyn4e @ 31.10.2007. 15:34 ] @
Hm, mozda mu pomogne sed za windoze...
http://www.student.northpark.edu/pemente/sed/

Ali opet, ostaje pitanje - kako to uraditi bez dodataka u dos batch fajlu - pretpostavljam da moze, ali ko zna...
[ uranium @ 01.11.2007. 03:26 ] @
Kao što random već reče, zaista može uz pomoć for petlje:



@echo off
for /f "tokens=1* delims=." %%a in (%1) do @echo off && if 42%%b NEQ 42 ( call xxx "%%a,%%b"
) else (@echo on && @echo %%a)


Prethodni kod treba sačuvati kao xxx.bat [ bitno je da "else" i (barem) desna zagrada koja mu prethodi budu u istoj liniji ].
Način upotrebe je onda sledeći:


xxx x1.txt > x2.txt
del x1.txt
ren x2.txt x1.txt


a to bi se opet moglo umotati u batch...

Nažalost, nisam uspeo da se oslobodim rekurzije tako da bi procesiranje fajla sa dovoljno velikim brojem zareza verovatno pojelo sav stek.
Doduše, imam još jednu varijaciju koja je, čini mi se, za nijansu otpornija... ali u konačnom ni to nije dovoljno dobro...

Postoji i još jedan problem sa ovim pristupom - for /f ignoriše sve prazne linije na koje naiđe - tako da rezultujući fajl neće imati ni jednu praznu liniju [ osim ako smo procesirali fajl čije su sve linije prazne ]

[Ovu poruku je menjao uranium dana 01.11.2007. u 04:47 GMT+1]