[perl] klein replace vraagje

Pagina: 1
Acties:

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Hoi

Ik heb een map met tig HTML files. Die zien er ongeveer zo uit:

code:
1
2
3
4
5
6
7
blah
blah
*******BEGIN CONTENT*******
content
*******END CONTENT*********
balh 
blah


Nou heb ik een perl ding gemaakt wat de content eruit haalt:

code:
1
perl -ne 'print if (/BEGIN CONTENT/) .. (/END CONTENT/)' file.html


Nou echoot hij het naar stdout, maar ik wil dat ie de html file vervangt.
Hoe zou ik dat aan kunnen pakken?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

code:
1
> file.html
erachter plakken lijkt me 1 van de vele opties. Maar ik kan me voorstellen dat je 't wat generieker wilt hebben, dus vertel 'ns wat meer over de context?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

drm, gaat niet werken. Je shell maakt nl. een leeg bestand file.html aan, en koppelt die aan de stdout, vooraleer perl gestart wordt. Perl krijgt dan een lege file om te parsen.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

kenneth:
drm, gaat niet werken. Je shell maakt nl. een leeg bestand file.html aan, en koppelt die aan de stdout, vooraleer perl gestart wordt. Perl krijgt dan een lege file om te parsen.
mja, idd :X Niet bij stil gestaan dat dat (kennelijk) ongebufferd gebeurt.

Maar goed, dat maakt opzich niet zoveel uit, dan kun je gewoon eerst file.html renamen naar file.html.org en dan dezelfde exercitie uitvoeren met > file.html erachter.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • BOOTZ
  • Registratie: Maart 2001
  • Laatst online: 17-03 09:38
in je perlscript kan je wel iets veranderen.

Perl:
1
2
3
open(OUTF,">outfile.html");
print OUTF "$content";
close OUTF;


dit is vrij algemeen over het schrijven van een bestand. aan je huidige print-statements kan je dus de file-handle toevoegen (dus print HANDLE "$content";), en dan krijg je het niet meer naar stdout.
om de bestaande file te vervangen kan je bijvoorbeeld een variabele bijhouden met de hele content, en die dan op het eind pas wegschrijven, als je de oude file al gesloten hebt. het wordt dan zoiets:

Perl:
1
2
3
4
5
6
7
8
9
$content = "";
open(INPF,"file.html");
# parse-code, elk print-statement wordt:
$content .= "parsed stuk"
close INPF;

open(OUTF,">file.html");
print OUTF "$content";
close OUTF;

Maak je eigen poll