Toon posts:

Sed en html <HEAD>

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer in een script dat uitgevoerd wordt door PHP een sed op een file los te laten.
Wat het moet doen is de eerste <HEAD> opzoeken en dit vervangen door:

<HEAD><meta http-equiv="pragma" content="no-cache>

Ik probeer het met de volgende regel:

cat index.html | sed -e 's#\<HEAD\>#\<HEAD\>\<meta http\-equiv\=\"pragma\" content\=\"no\-cach
e\>\"#' > web.html

maar de output wordt dan:

<<HEAD><meta http-equiv="pragma" content="no-cache>">

en de </HEAD> regel wordt ook bewerkt naar:

</<HEAD><meta http-equiv="pragma" content="no-cache>">

terwijl dit niet de bedoeling is.

Heeft iemand een idee hoe ik dit voor elkaar krijg.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
kan je niet makkelijker str_replace gebruikeN?

Verwijderd

Topicstarter
str_replace vervangt het een door het ander.
Wat ik wil is juiste dat er achter de <HEAD>
<meta http-equiv="pragma" content="no-cache> komt te staan.

En mijn kennis van PHP is soms nog te :? . Daarom wil ik het via een shell script en SED uitvoeren.

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 04-09 07:47

odysseus

Debian GNU/Linux Sid

code:
1
2
3
4
5
kde3@odysseus:~$ echo "<HEAD>" | sed 's/<HEAD>/<HEAD><meta http-equiv="pragma" content="no-cache>/'
<HEAD><meta http-equiv="pragma" content="no-cache>
kde3@odysseus:~$ echo "</HEAD>" | sed 's/<HEAD>/<HEAD><meta http-equiv="pragma" content="no-cache>/'
</HEAD>
kde3@odysseus:~$

Dat werkt hier perfect. Je kunt het ook nog lastiger maken door gebruik te maken van dingen als (?<=\<HEAD\>) (dat matcht op <HEAD>, maar neemt het niet in het resultaat op) omdat dat iets netter is, maar het moet niet nodig zijn :).

* odysseus vindt de beschrijving van de syntax van (?<=patroon) in de Perl Pocket Reference nog altijd vreemd klinken...'positieve achterwaartse assertie met nulresultaat'.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • Grum
  • Registratie: Juni 2001
  • Niet online
Komt er dus gewoon op neer dat je niet onnodig moet gaan zitten escapen.

Daarnaast is de opmerking 'str_replace doet niet wat ik wil' nogal raar/dom/vaag omdat s/xxx/xxx/ precies etzelfde doet maar dan regex based.

sed & perl gaan niet samen ... ik meen dat sed POSIX gebruikt en daar zitten de fijnheden als (?<=patroon) niet in naar mijn weten.

Verwijderd

Topicstarter
Op zaterdag 08 juni 2002 16:40 schreef odysseus het volgende:
code:
1
2
3
4
5
kde3@odysseus:~$ echo "<HEAD>" | sed 's/<HEAD>/<HEAD><meta http-equiv="pragma" content="no-cache>/'
<HEAD><meta http-equiv="pragma" content="no-cache>
kde3@odysseus:~$ echo "</HEAD>" | sed 's/<HEAD>/<HEAD><meta http-equiv="pragma" content="no-cache>/'
</HEAD>
kde3@odysseus:~$

Dat werkt hier perfect. Je kunt het ook nog lastiger maken door gebruik te maken van dingen als (?<=\<HEAD\>) (dat matcht op <HEAD>, maar neemt het niet in het resultaat op) omdat dat iets netter is, maar het moet niet nodig zijn :).

* odysseus vindt de beschrijving van de syntax van (?<=patroon) in de Perl Pocket Reference nog altijd vreemd klinken...'positieve achterwaartse assertie met nulresultaat'.
Al dat escapen is voor als het in een script gebruikt gaat worden. Zoals je het hier op de commandline uitvoerd heb je idd het escapen niet nodig.
Waar het mij werkelijk om gaat is het correct neerzetten van de output en het niet veranderen van de </HEAD>.
Pagina: 1