1 votes

Comment supprimer des sections de fichiers HTML dans un lot de plus de 700 fichiers ?

Tout d'abord :
J'utilise la dernière version d'OSX et je peux éditer les fichiers HTML avec CotEditor et KompoZer. Je n'ai cependant aucune expérience des éditeurs HTML en général :/
Si je dois le faire - parce que l'une de vos réponses est super simple et pratique - je pourrais passer à une machine Win7 pour cette tâche.

Le problème :
J'ai un peu plus de 700 fichiers HTML sous la main qui partagent la même structure de base, ils sont organisés en plusieurs tableaux et j'ai besoin de supprimer certains contenus de chacun d'entre eux, qui consistent toujours en les mêmes lignes avec des titres et des colonnes inférieures avec des contenus modifiables. -- Si je pouvais spécifier quelque chose comme "supprimer toute la colonne qui contient par exemple "Nom" dans la cellule du haut", cela ferait l'affaire. De plus, j'ai besoin de supprimer les parties récurrentes (qui en théorie peuvent être trouvées et remplacées pour tous les fichiers... mais, bon, en lot d'une manière ou d'une autre).

Pouvez-vous m'aider ? Est-ce que KompoZer fera l'affaire ou avez-vous une autre recommandation ? Merci :)

-----EDIT-----
J'ai essayé TextWrangler pour ses capacités de recherche et de remplacement par lots, et il fonctionne très bien pour trouver du code récurrent dans de nombreux fichiers, de sorte que je sais comment j'obtiendrai exactement les mêmes morceaux dans chaque fichier. Il ne me reste plus qu'à modifier le contenu.

Existe-t-il un moyen de trouver le contenu entre deux points récurrents ? Par exemple, si je savais quelque chose avant et après, le contenu que je souhaite supprimer est toujours le même :

<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>

J'aurais donc besoin de rechercher et remplacer entre <tag> txt_a et txt_b </tag> ou même trouver et remplacer à partir de <tag> txt_a jusqu'à et y compris txt_b </tag>

c'est la partie la plus difficile pour moi, j'ai vraiment besoin d'aide
-----EDIT2-----
Après la réponse de Gombai Sándor et le commentaire de Dooley_labs, j'ai eu quelques idées, et bien que la variante sed fonctionne depuis le terminal, j'ai choisi TextWrangler pour faire le travail.
TextWrangler peut effectuer des recherches et des remplacements dans plusieurs fichiers, mais il accepte également les expressions régulières grâce à l'option "grep". J'ai appris à connaître les expressions régulières et j'ai pu résoudre mon problème. La partie "magique" pour moi a été d'obtenir les bons caractères génériques. En particulier le simple .* . Pour tous ceux qui souhaitent s'amuser avec les expressions régulières, je recommande ce site, que j'ai trouvé très utile : regexr.com

0voto

Gombai Sándor Points 3990

Les IDE les plus courants ont la fonction de recherche et de remplacement (regexp) dans les fichiers (au sein d'une structure de répertoires). Même les petits éditeurs tendent à offrir cette fonction ; sous Windows, NotePad++ en est un bon exemple.

Pour OSX, où vous disposez des outils habituels Shell, il peut s'agir d'une tâche typique pour sed qui est un éditeur en soi... un éditeur très spécial.

À condition que tous les fichiers se trouvent dans le même répertoire, vous pouvez utiliser cette fonction pour supprimer les parties inutiles et placer le résultat dans des fichiers se terminant par .htm que vous pouvez renommer (après quelques vérifications) en .html.

$ cat just-an-html.html
<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>
$ for HTML in *.html; do sed -e 's@\(tag> txt_a\) .*\(txt_b </tag\)@\1 \2@g' $HTML > $(basename $HTML html)htm ; done
$ ls *.htm
just-an-html.htm
$ cat just-an-html.htm
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>

Il est également possible de supprimer la sous-chaîne directement dans les fichiers (-i : inplace), mais je ne le recommanderais pas à moins que vous n'ayez des sauvegardes à jour.

$ cat just-an-html.html
<tag> txt_a Content1_to_delete txt_b </tag>
<tag> txt_a Content2_to_delete txt_b </tag>
<tag> txt_a Content3_to_delete txt_b </tag>
$ for HTML in *.html; do sed -i -e 's@\(tag> txt_a\) .*\(txt_b </tag\)@\1 \2@g' $HTML  ; done
$ cat just-an-html.html
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>
<tag> txt_a txt_b </tag>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X