Hoi
ik heb een lijst van files waarin ik iets wil wijzigen...
deze roep ik op met grep...
maar kan ik met grep ook gelijk een wijziging door voeren?
zo ja, hoe.
Indien dit niet kan hoe kan ik het dan oplossen m.b.v. linux
cheerz
Tim
Likes: 0
Hoi
ik heb een lijst van files waarin ik iets wil wijzigen...
deze roep ik op met grep...
maar kan ik met grep ook gelijk een wijziging door voeren?
zo ja, hoe.
Indien dit niet kan hoe kan ik het dan oplossen m.b.v. linux
cheerz
Tim
Ik dacht dat greb alleen maar voor print acties kon worden gebruikt, maar ben niet zeker, ken het eigenlijk niet zo goed
kijk eens naar 'sed'
-> man sed
replace iets_oud iets_nieuw /locatie/file*
@kenneth, sed ziet er wel errug ingewikkeld uit, ik wordt opslag moe als ik ernaar kijk
@Richard, is die replace die jij hier omschrijft per file?
mijn bedoeling is alle files die bijv. "blah123" bezitten te vervangen met "blah000"
van dir x en alle onderliggende dirs dan...
kan dat ook met replace?
Wanneer je "dit" in alle bestanden wilt veranderen in "dat":
perl -pi -e 's/dit/dat/' *
Of wat jij wil:
perl -pi -e 's/blah123/blah000/' *
en als 'dit' nou een lap tekst is van pak em beet 30 regels, gaat het dan ook zo makkelijk?
Ik zou zeggen: Probeer het uit met een testbestand.
zijn geen andere methodes dan perl???
Als je geen perl hebt of wilt installeren, dan kan je ook nog zoiets doen (ongetest, altijd eerst backup maken!) :
for f in *; do mv $f $f.orig && cat $f.orig | sed -e 's/vervangdit/doordit/g' > $f; done; rm -f *.orig
maar of dat nou makkelijker is dan die perl oneliner... vraag 't me af![]()
tja... sed zie ik echt niet zitten
niet nu althans... het lijkt er op dat ik 3 weken
de boeken in moet om 30 minuten files te veranderen
dus dat schiet niet op.
ik ff getest met perl en dat werkt wel maar....
niet voor onderliggende dirs.
getest met: perl -pi -e 's/blah123/blah000/' *
en met: perl -pi -e 's/print"testjee/echo"testjaa/' *
maar 2 onderliggende dirs (nl , en )krijg ik een foutmelding:
Can't do inplace edit: en is not a regular file.
Can't do inplace edit: nl is not a regular file, <> line 1676.
de files die in die dirs staan zijn dus niet aangepast
iemand?
........
Laatst gewijzigd door timmy; 08/05/07 om 15:49. Reden: Automerged Dubbelpost
ik heb het ff met sed geprobeerd maar dat schiet niet veel meer op:
# for f in *; do mv $f $f.orig && cat $f.orig | sed -e 's/testjee/testjaa/g' > $f; done;
cat: dir1.orig: Is a directory
cat: dir2.orig: Is a directory
en met:
for f in *; do mv $f $f.orig && cat $f.orig | sed -e 's/testjee/testjaa/g' > $f; done; rm -f *.orig
cat: dir1.orig: Is a directory
cat: dir2.orig: Is a directory
rm: cannot remove `dir1.orig': Is a directory
rm: cannot remove `dir2.orig': Is a directory
# ls -all
total 48
drwxrwxr-x 4 admin admin 4096 May 9 11:15 .
drwx------ 4 admin admin 4096 May 9 11:06 ..
-rw-r--r-- 1 root root 0 May 9 11:15 dir1
drwxrwxr-x 2 admin admin 4096 May 9 10:53 dir1.orig
-rw-r--r-- 1 root root 0 May 9 11:15 dir2
drwxrwxr-x 2 admin admin 4096 May 9 10:53 dir2.orig
-rw-r--r-- 1 root root 44 May 9 11:15 file1.php
er klopt niet veel meer van he?!
dir1 en dir1 zijn een file geworden en geen directory meer
2 nieuwe dirs bijgekomen: dir1.orig en dir2.orig
de file in de dirs zijn niet gewijzigd
maw. een hoop ellende
ik dat ik beter af ben het maar handmatig te doen![]()
sed -i 's/BLAAT/blaat/g' *
Dit zou alle bestanden moeten nagaan en BLAAT veranderen in blaat