Prva enovrstičnica oz. kako bolje rečti one-liner 🙂

Verjetno moji primeri ne bodo najkrajši, glede na to da za vsako stvar uporabim kar perl, zatorej komaj čakam na komentarje in borbo krajšanja.

Tale bo enostavna, v vseh datotekah v imeniku zamenjati besedilo.

for i in **ls -1** ; do cat $i |perl -ne ‘s/nek_star_string/nov_string/g; print’ >$i.old; mv $i.old $i; done

pri čemer lahko ls -1 zamenjate z ls -1 *.html, če zelite besedilo zamenjati samo v html datotekah.

Če želite narediti enako zamenjavo tudi po vseh podimenikih, ls -1 zamenjate z ustreznim find ukazom, kot recimo find . -name “*.html”.

Toliko zaenkrat, kmalu kaj resnejšega.

S.

Comments

sIMON2007-06-10 13:45:16

Me je kolega Ales takoj popravil, prisparal je par bytov:

for i in ls -1;do sed ‘s/old/new/g’ $i >$i.old;mv $i.old $i;done

Se kdo krajsi ? 🙂

s.

dalibor2007-07-01 17:25:04

Danes sem si podaljsal dan za celo uro in se ti zlo zahvaljujem za tale oneliner 🙂
V vseh konfiguracijah je bilo potrebno zamenjat ip 🙂

Aleshiukas2007-08-25 14:42:43

Ok, se ena finta. Boljsa od prejsnje je, ker pusti fajle pri miru, ce nimajo
kljucne besede notri. In pa naredi kopijo originala.

grep -Rl old * |xargs perl -pi’.bck’ -e ‘s/old/new/g’

Se parametri:

-R – zleze vsepovsod po podrirektorijih
-l – se takoj ustavi, cim najde prvi match v datoteki
-pi’.bck’ – originalnemu fajlu doda .bck koncnino, in skreira novega z original imenom
-e – izvrsi komando za vsako vrstico

Aleshiukas2007-08-25 14:44:55

Aja, glede na prejsni. Ce zelite originale drugje, pol je finta v -i flagu
…-pi’archive/*.bck’ …