J'ai des pages HTML dans lesquelles l'hébergeur au collé du JS avant le <HTML> ansi qu'après le </HTML>
je voudrais bien une moulinette qui va ne garder que le code qui se trouve entre les deux balises.
Je pense qu'un sed -e 'expr' < fic1 > fic2 pourrait faire ça mais j'échoue à trouver ce que contiendrait 'expr' [...]
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d s/.*(<[hH][tT][hM][lL]>)/1/ s/(</[hH][tT][mM][lL]>).*/1/'
Ou:
perl -0777 -pe 's{^.*?(<html>.*</html>).*}{$1}'
-- Stéphane
Olivier Miakinen
Le 11/04/2008 11:40, Stephane Chazelas répondait à Jacques Lav!gnotte :
J'ai des pages HTML dans lesquelles l'hébergeur au collé du JS avant le <HTML> ansi qu'après le </HTML>
je voudrais bien une moulinette qui va ne garder que le code qui se trouve entre les deux balises.
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Tiens, je ne connaissais pas cet emploi du « ! ». Je suppose qu'il va inverser la sélection (donc les lignes qui ne sont *pas* celles allant de <html> à </html>) avant d'effectuer la commande d.
C'est plus sûr en effet, mais il y a des chances que l'hébergeur ne rajoute que des lignes complètes, auquel cas il est inutile de nettoyer les caractères qui se trouveraient devant <html> ou derrière </html>.
Ou:
perl -0777 -pe 's{^.*?(<html>.*</html>).*}{$1}'
Jolie pub pour l'emploi de perl au lieu de sed. ;-)
Le 11/04/2008 11:40, Stephane Chazelas répondait à Jacques Lav!gnotte :
J'ai des pages HTML dans lesquelles l'hébergeur au collé du JS avant le
<HTML> ansi qu'après le </HTML>
je voudrais bien une moulinette qui va ne garder que le code qui se
trouve entre les deux balises.
sed '
/<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Tiens, je ne connaissais pas cet emploi du « ! ». Je suppose qu'il va
inverser la sélection (donc les lignes qui ne sont *pas* celles allant
de <html> à </html>) avant d'effectuer la commande d.
C'est plus sûr en effet, mais il y a des chances que l'hébergeur ne
rajoute que des lignes complètes, auquel cas il est inutile de nettoyer
les caractères qui se trouveraient devant <html> ou derrière </html>.
Ou:
perl -0777 -pe 's{^.*?(<html>.*</html>).*}{$1}'
Jolie pub pour l'emploi de perl au lieu de sed. ;-)
Le 11/04/2008 11:40, Stephane Chazelas répondait à Jacques Lav!gnotte :
J'ai des pages HTML dans lesquelles l'hébergeur au collé du JS avant le <HTML> ansi qu'après le </HTML>
je voudrais bien une moulinette qui va ne garder que le code qui se trouve entre les deux balises.
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Tiens, je ne connaissais pas cet emploi du « ! ». Je suppose qu'il va inverser la sélection (donc les lignes qui ne sont *pas* celles allant de <html> à </html>) avant d'effectuer la commande d.
C'est plus sûr en effet, mais il y a des chances que l'hébergeur ne rajoute que des lignes complètes, auquel cas il est inutile de nettoyer les caractères qui se trouveraient devant <html> ou derrière </html>.
Ou:
perl -0777 -pe 's{^.*?(<html>.*</html>).*}{$1}'
Jolie pub pour l'emploi de perl au lieu de sed. ;-)
Olivier Miakinen
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la ligne 2 à la ligne 4 ?
sed '
/<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs
<html> et plusieurs </html> dans le même code, sed prendrait comme
point de départ le premier <html> du fichier et comme point d'arrivée
le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la
ligne 2 à la ligne 4 ?
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la ligne 2 à la ligne 4 ?
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la ligne 2 à la ligne 4 ?
En fait de chaque <html> au </html> suivant (pas sur la meme ligne).
Et s'il n'y a pas de </html>, de <html> a la fin du fichier.
Dans l'exemple, ca retournerait 2,3,4,5,6 (2-4 et 5-6).
On peut aussi faire:
sed ' 1,/</html>/!d /<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
-- Stéphane
2008-04-11, 13:03(+02), Olivier Miakinen:
sed '
/<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs
<html> et plusieurs </html> dans le même code, sed prendrait comme
point de départ le premier <html> du fichier et comme point d'arrivée
le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la
ligne 2 à la ligne 4 ?
sed ' /<[hH][tT][hM][lL]>/,/</[hH][tT][mM][lL]>/!d
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
Par exemple, dans le texte suivant, la sélection irait bien de la ligne 2 à la ligne 4 ?
En fait de chaque <html> au </html> suivant (pas sur la meme ligne).
Et s'il n'y a pas de </html>, de <html> a la fin du fichier.
Dans l'exemple, ca retournerait 2,3,4,5,6 (2-4 et 5-6).
On peut aussi faire:
sed ' 1,/</html>/!d /<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
-- Stéphane
Olivier Miakinen
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
[...]
En fait de chaque <html> au </html> suivant (pas sur la meme ligne).
Et s'il n'y a pas de </html>, de <html> a la fin du fichier.
[...]
Très intéressant ! Du coup sed devient un peu moins nul que je croyais par rapport à perl... ;-)
On peut aussi faire:
sed ' 1,/</html>/!d /<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html> ... </html> ?
Par exemple, avec :
1. des choses 2. <html> 3. code 1 4. </html> 5. des trucs 6. <html> 7. code 2 8. </html> 9. des bidules
Juste pour être sûr : si jamais il était possible d'avoir plusieurs
<html> et plusieurs </html> dans le même code, sed prendrait comme
point de départ le premier <html> du fichier et comme point d'arrivée
le premier </html> suivant le point de départ, c'est bien ça ?
[...]
En fait de chaque <html> au </html> suivant (pas sur la meme
ligne).
Et s'il n'y a pas de </html>, de <html> a la fin du fichier.
[...]
Très intéressant ! Du coup sed devient un peu moins nul que je croyais
par rapport à perl... ;-)
On peut aussi faire:
sed '
1,/</html>/!d
/<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html>
... </html> ?
Par exemple, avec :
1. des choses
2. <html>
3. code 1
4. </html>
5. des trucs
6. <html>
7. code 2
8. </html>
9. des bidules
Juste pour être sûr : si jamais il était possible d'avoir plusieurs <html> et plusieurs </html> dans le même code, sed prendrait comme point de départ le premier <html> du fichier et comme point d'arrivée le premier </html> suivant le point de départ, c'est bien ça ?
[...]
En fait de chaque <html> au </html> suivant (pas sur la meme ligne).
Et s'il n'y a pas de </html>, de <html> a la fin du fichier.
[...]
Très intéressant ! Du coup sed devient un peu moins nul que je croyais par rapport à perl... ;-)
On peut aussi faire:
sed ' 1,/</html>/!d /<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html> ... </html> ?
Par exemple, avec :
1. des choses 2. <html> 3. code 1 4. </html> 5. des trucs 6. <html> 7. code 2 8. </html> 9. des bidules
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html> ... </html> ? [...]
sed, c'est pas compliqué. Dans address1,address2, sed leve un drapeau quand il atteint address1 et le rabaisse (apres le processing de la ligne) quand il trouve address2. Et l'action correspondante est executee quand le drapeau est haut (ou bas avec !).
1,/</html>, le drapeau est up des la premiere ligne et est rabaissé au premier </html>.
/<html>/,$, le drapeau est levé au premier <html>
Attention, si tu fais:
sed ' /<html>/,$!d 1,/</html>/!d'
L'addresse 1 ne sera jamais trouvee si <html> n'est pas sur la premiere ligne, donc la second expression ne matchera pas.
-- Stéphane
2008-04-11, 14:42(+02), Olivier Miakinen:
[...]
sed '
1,/</html>/!d
/<html>/,$!d'
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html>
... </html> ?
[...]
sed, c'est pas compliqué. Dans address1,address2, sed leve un
drapeau quand il atteint address1 et le rabaisse (apres le
processing de la ligne) quand il trouve address2. Et l'action
correspondante est executee quand le drapeau est haut (ou bas
avec !).
1,/</html>, le drapeau est up des la premiere ligne et est
rabaissé au premier </html>.
/<html>/,$, le drapeau est levé au premier <html>
Attention, si tu fais:
sed '
/<html>/,$!d
1,/</html>/!d'
L'addresse 1 ne sera jamais trouvee si <html> n'est pas sur la
premiere ligne, donc la second expression ne matchera pas.
A condition que "</html>" ne soit pas sur la premiere ligne.
Mais là, comment se comportera-t-il s'il y a plusieurs séquences <html> ... </html> ? [...]
sed, c'est pas compliqué. Dans address1,address2, sed leve un drapeau quand il atteint address1 et le rabaisse (apres le processing de la ligne) quand il trouve address2. Et l'action correspondante est executee quand le drapeau est haut (ou bas avec !).
1,/</html>, le drapeau est up des la premiere ligne et est rabaissé au premier </html>.
/<html>/,$, le drapeau est levé au premier <html>
Attention, si tu fais:
sed ' /<html>/,$!d 1,/</html>/!d'
L'addresse 1 ne sera jamais trouvee si <html> n'est pas sur la premiere ligne, donc la second expression ne matchera pas.