[ milan82 @ 25.02.2009. 10:32 ] @
Pozdrav,

potrebna mi je skripta za zamjenu stringova, pseudo kod bi izgledao ovako:

za svaku datoteku s nastavkom .txt u nekom direktoriju (ima dosta datoteka),
parsiraj svaku red po red i nađi "nešto", tražim navodnike i ono unutar
sad to "nešto" treba zamijeniti sa nekim drugim stringom, npr. blabla, znači: "nešto" --> blabla
moguće je da u jednom redu ima potrebe za više zamjena (više "nešto", "drugo", itd.)
i bilo bi dobro pobrojiti koliko se puta pojavljuje npr. "nešto" u pojedinoj datoteci.

Mislim da nije neki problem, al sam u stisci s vremenom i malo sam "ispao" iz shell programiranja ..., nažalost.
Ne treba mi ukupno rješenje, dobrodošli su i prijedlozi za pojedine stavke.

[ Jbyn4e @ 25.02.2009. 12:25 ] @
"Pseudo" kod skripte:
Code:

for i in `ls *.txt`
do
cat $i | sed 's/sta/sta_zamena/g' | sed 's/nesto_drugo/nesto_drugo_zamena/g' > tmp.txt
mv tmp.txt $i
koliko=`cat $i| grep "nesto"| wc -l`
echo "Ima $koliko 'nesto' u $i"
done

Snaci ces se vec...

Treba li da objasnjavam?
[ milan82 @ 25.02.2009. 14:01 ] @
Super, hvala na odgovoru, ako zapnem, pitat cu;-)
[ Jbyn4e @ 25.02.2009. 15:23 ] @
No, samo jedno, sad vidim:
Code:

koliko=`cat $i| grep "nesto"| wc -l`

- nece bas "lepo" izbrojati koliko ima "nesto" vec broj linija u kojima se javlja "nesto". Ukoliko se "nesto" javlja vise puta u liniji, bice izbrojano samo jednom.

[ uranium @ 25.02.2009. 16:47 ] @
dovoljno je samo dodati -o switch

dakle

koliko=`cat $i | grep -o "nesto"| wc -l`



izvod iz man grep

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

ukoliko "nesto" nije regex, verovatno je efikasnije koristiti fgrep ... ( tj. grep -F )
[ milan82 @ 26.02.2009. 11:57 ] @
Hvala Jbyn4e & uranium

Ima jos jedna stvar, moguce je da imam u istoj liniji gdje je "nesto" neki string npr. XX (select) i to mi znaci da ne diram tu liniju i preskocim jos linija ispod; ispod je primjer; ove linije ne smijem dirati.

strSelect = "SELECT hist.OBJID, to_char(hist.X_SPRTT, 'dd.mm.yyyy') " & _
" FROM TABLE_SITE_PART sp " & _
",TABLE_X_TARIFPROP tp " & _
",TABLE_X_ALL_SITEPRT_TRFPROP hist "