Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein
Het ligt er wel een beetje aan hoe het adres in je files staat en of dezelfde tekst niet ook ergens anders (kan) voorkomen en van dat soort andere details.
1
| for file in *.html; do cat $file|sed 's/^Oudestraat 35$/Nieuwestraat 1/' > $file; done |
Als je het probeert, dan doe je het natuurlijk eerst met kopietjes van de bestanden
Verdiep je eens in regular expressions om te kijken hoe die van jou er uit moet zien.
1
| cat bestand | doeIetsMetInput > bestand |
niet een probleem op soms? Is het niet veiliger om iets in de trend van:
1
| cat bestand | doeIetsMetInput > bestand.tmp ; mv bestand.tmp bestand |
Had dacht ik iest met buffers te maken. (weet het niet zeker overigens, maar kan me voorstellen dat bestanden het niet leuk vinden om gelezen en tegelijkertijd beschreven te worden...)
Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker
Mr Fatmen: men = meervoud. Mr Fatmen is dus onmogelijk. Bovendien: je site is dood. Beetje een niet-opbouwende bijdrage maar ik dacht ik meld het even.
[ Voor 15% gewijzigd door CmdrKeen op 28-07-2003 10:24 ]
Bloed, zweet & koffie
Of, als je het echt leuk wil maken:
1
2
3
4
5
| for x in `find | grep html`
do mv $x $x.tmp
sed 's/^Oudestraat 35$/Nieuwestrat 1/' < $x.tmp > $x
rm $x.tmp
done |
* Valium is lid van de bond tegen misbruik van cat!
[ Voor 9% gewijzigd door Valium op 28-07-2003 10:28 . Reden: code opschonen om layout niet te verneuken. ]
Remember this; very little is needed to make a happy life. ~ Marcus Aurelius Antoninus (121-180)
1
| perl -npi.bak -e 's/Oud/Nieuw/' *.html |
-n causes Perl to assume the following loop around your program, which makes it iterate over filename arguments somewhat like sed -n or awk...
-p causes Perl to assume the following loop around your program, which makes it iterate over filename arguments somewhat like sed...
-i[extension] specifies that files processed are to be edited in-place. It does this by renaming the input file, opening the output file by the original name, and selecting that output file as the default for print() statements. The extension, if supplied, is used to modify the name of the old file to make a backup copy...
Zie ook man perlrun.
-edit-
Beetje opgeschoond
[ Voor 6% gewijzigd door RAMeijer op 28-07-2003 11:04 ]
Ehhmm, juist... Linux? Command-line? UltraEdit?
Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....hammerhead schreef op 28 July 2003 @ 10:09:
levert die
code:
1 cat bestand | doeIetsMetInput > bestand
niet een probleem op soms? Is het niet veiliger om iets in de trend van:
code:
1 cat bestand | doeIetsMetInput > bestand.tmp ; mv bestand.tmp bestand
Had dacht ik iest met buffers te maken. (weet het niet zeker overigens, maar kan me voorstellen dat bestanden het niet leuk vinden om gelezen en tegelijkertijd beschreven te worden...)
XP2000+, GA7VRXP, 2 x 40GB Maxtor in Raid0, Hitachi 174SXWB, Canon Powershot A40
En daarom:clstat schreef op 28 July 2003 @ 11:38:
[...]
Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....
1
| perl -npi.bak -e 's/Oud/Nieuw/' *.html |
Niet altijd. Had iets met buffergrootte te maken. Kan me herinneren dat er ooit een topic is geweest waarin dat naar voren kwam. Was uit mijn hoofd iets van 8K ofzo. Dus als je bestanden >8K waren werkte het niet en anders wel (ofzo... weet het niet meer helemaal zeker....)clstat schreef op 28 July 2003 @ 11:38:
[...]
Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....
Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker
Net ff geprobeert met een text bestand. Op AIX wordt de file gewoon leeggemaakt. Misschien ook nog OS afhankelijk?hammerhead schreef op 28 July 2003 @ 12:09:
[...]
Niet altijd. Had iets met buffergrootte te maken. Kan me herinneren dat er ooit een topic is geweest waarin dat naar voren kwam. Was uit mijn hoofd iets van 8K ofzo. Dus als je bestanden >8K waren werkte het niet en anders wel (ofzo... weet het niet meer helemaal zeker....)
Eigenlijk heb ik zo'n zelfde probleem als de topic-starter. Ik wil characters uit een file halen zonder de i-node te veranderen. Dus een kopie maken en dan mv is geen optie....
XP2000+, GA7VRXP, 2 x 40GB Maxtor in Raid0, Hitachi 174SXWB, Canon Powershot A40
Eerst bestand gemaakt:
1
2
3
| rm foo for i in `seq 1 100` ; do echo 1 >> foo ; done cat foo | sed s/1/2/ >foo |
Bovenstaande werkt gewoon en levert een bestand om met 100 keer een 2.
1
2
3
| rm foo for i in `seq 1 5000` ; do echo 1 >> foo ; done cat foo | sed s/1/2/ >foo |
Bovenstaande levert een bestand op met slechts 4096 keer een 2. (4096 omdat hij elke keer twee tekens wegschrijft bij het maken, een 1 en een CR). Dus hij leest een buffer van 8192 bytes in
Bovenstaande is in ieder geval getest op een linux bak
Grrr... Die ubb tags moet ik niet vergeten af te sluiten
[ Voor 9% gewijzigd door hammerhead op 28-07-2003 13:34 ]
Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker
Verwijderd
1
2
| grep -rl "oudestraat 35" /pad/naar/files/ |
xargs sed -i.bak "s/oudestraat 35/nieuwestraat 18/" |
Ik heb net de CSS declaratie in 100+ html files op die manier aangepast.
Ja, als de bestanden groter zijn dan 8 k dan werkt het inderdaad niet, dwz je houdt alleen de eerste 8k overNet ff geprobeert met een text bestand. Op AIX wordt de file gewoon leeggemaakt. Misschien ook nog OS afhankelijk?
Hm, ik weet eigenlijk niet of AIX hetzelfde reageert als linux, maar ik zou het zo doen:Eigenlijk heb ik zo'n zelfde probleem als de topic-starter. Ik wil characters uit een file halen zonder de i-node te veranderen. Dus een kopie maken en dan mv is geen optie....
1
| cp bestandmetinode tijdelijk;sed 's/oud/nieuw'<tijdelijk >bestandmetinode |
Probeer het eerst uit
[ Voor 3% gewijzigd door JeroenE op 28-07-2003 21:12 ]
Hmmm... Dit gaat natuurlijk werken...jeroene schreef op 28 juli 2003 @ 21:12:
Hm, ik weet eigenlijk niet of AIX hetzelfde reageert als linux, maar ik zou het zo doen:code:
1 cp bestandmetinode tijdelijk;sed 's/oud/nieuw'<tijdelijk >bestandmetinode
Probeer het eerst uit
Stom, daar heb ik niet aan gedacht...
XP2000+, GA7VRXP, 2 x 40GB Maxtor in Raid0, Hitachi 174SXWB, Canon Powershot A40