files aanpassen via command-line

Pagina: 1
Acties:

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 22:31
ik heb een website van ongeveer 100 tot 150 aparte html pagina's. (php was toen nog geen optie)
waar allemaal het adres op staat van het bedrijf.
maar nu zijn we verhuist en moet dat adress aangepast worden.
nu kan ik wel al die files openen en veranderen.

maar ik dacht aangezien linux vrij krachtig is.
is het misschien ook wel mogelijk door middel van een command line commando.

nu is mijn vraag, is dat zo?

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Het antwoord op je vraag is "ja" :+

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.

code:
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.

  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21:10
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...)

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 25-03 16:41

CmdrKeen

Krentenboltosti

offtopic:
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


  • Valium
  • Registratie: Oktober 1999
  • Laatst online: 20:39

Valium

- rustig maar -

hamerhoofd: inderdaad. Op sommige machines (SMP-machines, maar ook op uniproc machines gezien) moet je die tweede optie gebruiken.

Of, als je het echt leuk wil maken:
code:
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. ]


  • Preatorium
  • Registratie: September 2001
  • Laatst online: 20-04 15:17
Of gebruik UltraEdit, replace in files and done!

Remember this; very little is needed to make a happy life. ~ Marcus Aurelius Antoninus (121-180)


  • RAMeijer
  • Registratie: Februari 2000
  • Laatst online: 10-02 13:39
Een schonere methode is misschien het volgende:

code:
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 ]


  • cashewnut
  • Registratie: Januari 2002
  • Laatst online: 09-11-2025
Preatorium schreef op 28 July 2003 @ 10:32:
Of gebruik UltraEdit, replace in files and done!
Ehhmm, juist... Linux? Command-line? UltraEdit?

  • clstat
  • Registratie: Augustus 2002
  • Laatst online: 04-05 14:23
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...)
Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....

XP2000+, GA7VRXP, 2 x 40GB Maxtor in Raid0, Hitachi 174SXWB, Canon Powershot A40


  • RAMeijer
  • Registratie: Februari 2000
  • Laatst online: 10-02 13:39
clstat schreef op 28 July 2003 @ 11:38:
[...]

Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....
En daarom:

code:
1
perl -npi.bak -e 's/Oud/Nieuw/' *.html


:P

  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21:10
clstat schreef op 28 July 2003 @ 11:38:
[...]

Inderdaad, met de bovenste expressie wordt de file volgens mij de originele file leeg gemaakt....
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....)

Aviation is proof that given the will, we have the capacity to achieve the impossible.
--Eddie Rickenbacker


  • clstat
  • Registratie: Augustus 2002
  • Laatst online: 04-05 14:23
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....)
Net ff geprobeert met een text bestand. Op AIX wordt de file gewoon leeggemaakt. Misschien ook nog OS afhankelijk?

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


  • hammerhead
  • Registratie: April 2000
  • Laatst online: 21:10
Moest het nu natuurlijk nog even gaan proberen :)

Eerst bestand gemaakt:
code:
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.

code:
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

edit:

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

Ik zou zoiets doen:
code:
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.

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Net ff geprobeert met een text bestand. Op AIX wordt de file gewoon leeggemaakt. Misschien ook nog OS afhankelijk?
Ja, als de bestanden groter zijn dan 8 k dan werkt het inderdaad niet, dwz je houdt alleen de eerste 8k over :) Onder AIX werkt het dus blijkbaar helemaal niet? Ach ja, details, details ;) Ik zei toch dat hij het eerst even moest proberen?
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....
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 8)

[ Voor 3% gewijzigd door JeroenE op 28-07-2003 21:12 ]


  • clstat
  • Registratie: Augustus 2002
  • Laatst online: 04-05 14:23
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 8)
Hmmm... Dit gaat natuurlijk werken... :)
Stom, daar heb ik niet aan gedacht...

XP2000+, GA7VRXP, 2 x 40GB Maxtor in Raid0, Hitachi 174SXWB, Canon Powershot A40

Pagina: 1