Bonjour,
j'essaie de faire un script spécial qui me permettrait de supprimer automatiquement dans plusieurs pages html, des menus, etc.
Pour ça, j'ai appris comment créer un script en .sh qui détecterait par exemple <div id="menu_1">, qui supprime tout (y compris cette balise) jusqu'à rencontrer </div>.
C'est un peu compliqué, je sais.
Mais à force de chercher, j'ai trouvé que "sed" et "awk" qui semblent adaptés pour ces actions.
J'ai essayé de comprendre en lisant la doc (man sed/awk), j'ai vite laissé tomber.

Voilà ce qu'on m'a déjà conseillé :
http://www.siteduzero.com/forum-83-469863-p1-est-ce-que-le-shell-de-gnu-linux-me-permet-de-faire-ca.html

Mais ça ne fonctionne pas (ou alors je l'utilise mal).

J'espère avoir été clair.

Bonne journée, j'espère que toute cette neige ne vous ennuie pas trop. 🙂
copié-collé depuis codinghorror.com. Je pense qu'ils ont raison.
Désolé pour les non-anglophones

You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML.

Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions.

Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes.

[edit] par exemple on peut imbriquer les divisions l'une dans l'autre. Il faut donc un automate à pile
Voilà un petit script que mon collègue m'a fait (je ne suis pas certain d'avoir tout bien compris) :
#!/bin/sh
debut=`grep -n "<div id=\"pied\">" page_exemple.html | awk -F":" '{print $1}'`
liste=`grep -n "</div>" page_exemple.html | awk -F":" '{print $1}'`
for i in $liste
do
if test $i -ge $debut
then
        fin=$i
fi
done
echo $debut
echo $fin
sed -e '$debut,${vraiefin}d' page_exemple.html
Mais après, ça ne gère pas les div qui sont dans des div, etc.
Et sinon, je voudrais savoir comment ne faire ça que pour les fichiers nommé par exemple articlexxx.html (ou xxx dépend des fichiers trouvés).
Je commence des tutoriaux sur les scripts GNU/Linux, là.
pour gérer proprement les div qui en contiennent d'autres, un outil tel que HTML:😛arser serait sans doute approprié
Salut,

Pour avoir tenté moi-même ce genre de manip avec un script BASH, je confirme que c'est une horreur à faire.

Si tu es plus familier avec le langage PHP (ce qui est souvent le cas de ceux qui gèrent des sites web), je peux peut-être te suggérer une autre piste.

Tu peux faire des scripts PHP qui s'exécutent en ligne de commande :
tu commences le fichier par
#!/usr/bin/php
<?PHP
et tu les termines, comme tout script PHP par un
?>
Voir : PHP en ligne de commande

Tu peux prendre en entrée de ton script un nom de fichier comme argument (voir tableau $argv[] dans page du manuel PHP dont question ci-dessus)

A partir de là, tu disposes de toutes les possibilités du PHP !
Dont les commandes preg_replace et preg_quote (gestion des expressions rationnelles) avec lesquelles tu es peut-être déjà famillier ?

Ton code nettoyé peut être renvoyé vers la sortie standard ( fwrite(STDOUT... ) ou vers un fichier.

Personnellement, c'est une solution que j'ai déjà utilisée et ça fonctionne...


Ceci dit, utiliser un script pour faire ce genre de chose n'a d'intérêt que si tu effectues ce genre de remplacement très régulièrement.

Une application comme KFileReplace prend en charge les expressions rationnelles et pourrait peut-être suffire pour venir à bout de ton problème si tu ne dois effectuer le travail qu'une seule fois 😉


Bon courage !