Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/02/2023, à 19:27

Mornagest

sed et regex => Vim ; autre souci guillemets anglais => français

Salut les gens,

J'aimerais faire du rechercher / remplacer avec sed dans un gros fichier (une base de données d'environ 30 Mio), et évidemment, j'ai des contraintes ^^

Je vous donne un exemple concret :

<table>
<tbody>
<tr>
<td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" " /></td>
<td>Le couloir sud mène au <a href="http://essaimigration.baldursgateworld.fr/content/bg1-fantome-3665/">fantôme</a> d'un ami de Durlag, Daital, qui souhaite payer sa dette envers vous (il pense que vous êtes Durlag). Mais il se rend finalement compte de sa méprise et devient hostile !

Je souhaite remplacer ceci :

<table>
<tbody>
<tr>
<td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" " /></td>
<td>

par cela :

<img class="img-soluce-left" src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" " />Le couloir sud mène au <a href="http://essaimigration.baldursgateworld.fr/content/bg1-fantome-3665/">fantôme</a> d'un ami de Durlag, Daital, qui souhaite payer sa dette envers vous (il pense que vous êtes Durlag). Mais il se rend finalement compte de sa méprise et devient hostile !

L'idée est donc de virer les balises de tableaux HTML et d'ajouter une classe à mes images pour les mettre en forme comme je le souhaite via un fichier .css.

J'ai donc tenté cette commande :

sed -zr 's#<table>\n<tbody>\n<tr>\n<td><img src="(.*)" alt="(.*)" \/><\/td>\n<td>#<img class="img-soluce-left" src="\1" alt="\2" />#g' -i fichier_sortie

Mais je rencontre deux soucis :

1) seule une occurrence est remplacée. Je dois relancer la commande pour remplacer l'occurrence suivante.
2) il reste des balises TD sans que je comprenne pourquoi :

<img class="img-soluce-left" src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" " /></td>
<td>Le couloir sud mène au <a href="http://essaimigration.baldursgateworld.fr/content/bg1-fantome-3665/">fantôme</a> d'un ami de Durlag, Daital, qui souhaite payer sa dette envers vous (il pense que vous êtes Durlag). Mais il se rend finalement compte de sa méprise et devient hostile !

Si vous avez des idées, je suis preneur smile

Merci d'avance !

Dernière modification par Mornagest (Le 22/03/2023, à 10:21)


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#2 Le 26/02/2023, à 19:30

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

On n'utilise pas sed pour parser du html. Utilise

xmlstarlet

https://xmlstar.sourceforge.net/

Ou bien un language de programmation comme Perl ou Python, avec les bons modules.

En Perl, Mojo::DOM

Dernière modification par sputnick (Le 26/02/2023, à 19:40)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 26/02/2023, à 19:55

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Merci pour ta réponse smile

Le truc, c'est que je ne connais rien ni à Perl, ni à Python... c'est pour ça que j'espérais passer par sed pour travailler un fichier texte (certes en partie en HTML).

Pourquoi ne pas utiliser sed pour de l'HTML d'ailleurs ? J'ai réussi à l'utiliser pour d'autres rechercher / remplacer, d'ailleurs.


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#4 Le 26/02/2023, à 20:00

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Voici la réponse que je donne habituellement en Anglais, traduit par ChatGPT: Ne pas utiliser sed ni de regex pour analyser XML car vous ne pouvez pas / ne devez pas analyser de textes structurés tels que XML/HTML avec des outils conçus pour traiter des lignes de texte brut. Si vous devez traiter XML/HTML, utilisez un analyseur XML/HTML. Une grande majorité de langages ont une prise en charge intégrée pour l'analyse XML et il existe des outils dédiés comme XMLStarlet si vous avez besoin d'un coup rapide d'une ligne de commande shell. Ne jamais accepter un travail si vous n'avez pas accès aux bons outils.

https://stackoverflow.com/a/49352373/465183


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 26/02/2023, à 20:11

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Voici comment faire ave xmlstarlet:

xmlstarlet format -H file.html | sponge file.html # transforme du HTML invalide en HTML valide
xmlstarlet edit -L -d '//table//tr//td'  file.html # efface tous tes noeuds td
# edite le HTML pour ajouter un nouveau noeud <td>
xmlstarlet edit -a '//table//tr' -t elem -n td -v '<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" "'  file.html  | xmlstarlet unesc

# voici la sortie comme demandée sans utiliser sed!
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Example</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  </head>
  <body>
    <table>
      <tbody>
        <tr/>
        <td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" "</td>
      </tbody>
    </table>
  </body>
</html>

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 26/02/2023, à 20:19

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Le truc, c'est que le fichier que je souhaite modifier n'est pas un fichier XML complet ; c'est le contenu d'une colonne de base de données, une partie (importante) des attributs HTML est renseignée ailleurs, sur le site en dur et non dans la bdd...

Je crains que xmlstarlet n'introduise des balises ou des attributs là où je ne souhaite pas en avoir.


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#7 Le 26/02/2023, à 20:21

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Dans ce cas, donne un meilleur exemple de datas text/HTML, de préférence court, juste pour l'exemple. Je te donnerais la bonne façon de faire.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 26/02/2023, à 20:24

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Je te donne le début d'un article (publié sur WordPress pour te donner une idée) smile

Je me rends d'ailleurs compte que WordPress ajoute du code qui lui est propre (cfr la dernière ligne de l'extrait) :

<hr />

Cette carte est accessible dès le <a href="http://essaimigration.baldursgateworld.fr/content/bg1-chapitre-1-3057/">chapitre 1</a> et le reste durant tout le jeu.

<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/TourDurlag.png" alt=" " />
<ol>
 	<li>Entrée (si !)</li>
</ol>

<hr />

<table>
<tbody>
<tr>
<td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/erdane.png" alt=" " /></td>
<td>Non loin de votre lieu d'arrivée, vous voyez Erdane, qui peut vous vendre et vous acheter du matériel. Idéal pour éviter de devoir vous rendre à Nashkel pour revendre l'équipement que vous trouverez dans la tour.</td>
</tr>
</tbody>
</table>
En revanche, aucun moyen de se faire soigner ici. Il faudra alors aller à <a href="http://essaimigration.baldursgateworld.fr/content/nashkel-3121/">Nashkel</a>...

Dirigez-vous vers le sud pour accéder au corps de garde de la tour. En chemin, vous devez combattre deux <a href="http://essaimigration.baldursgateworld.fr/content/bg1-horreur-guerriere-3463/">horreurs guerrières</a>, et parfois, l'un ou l'autre <a href="http://essaimigration.baldursgateworld.fr/content/bg1-doppelgaenger-3551/">doppelgänger</a>.

Si vous avez payé l'excursion menée par Ike, à la <a href="http://essaimigration.baldursgateworld.fr/content/barbe-d-ulgoth-3089/">Barbe d'Ulgoth</a>, il vous attend devant le corps de garde. Il vous fait une présentation rapide de la tour, puis vous enjoint de le suivre. Parlez-lui à chaque fois qu'il s'arrête de marcher, puis suivez-le à l'intérieur.

Là, il présente quelques aspects inquiétants de la tour. Puis, après quelques boniments, il décrète une pause dans la visite. Il vous propose une pierre-sésame pour trois cents pièces d'or. Selon lui, c'est une affaire qu'il ne peut pas perdre, puisque si vous réussissez à repousser les limites d'exploration de la tour, il aura de nouvelles salles à faire visiter, et si vous mourez, il pourra présenter votre corps. Charmant...

Mais l'affaire ne se conclura jamais : un personnage monstrueux apparaît alors et annonce que la mort vous accueille. Il envoie une boule de feu sur Ike et les touristes qui l'accompagnent, puis disparaît aussi subitement. C'est un massacre...

<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/ikemort.png" alt=" " />

Si le cœur vous en dit, vous pouvez ressortir et arpenter le tour de garde pour affronter des squelettes, quelques horreurs guerrières et <a href="http://essaimigration.baldursgateworld.fr/content/bg1-garde-noir-3518/">gardes noirs</a>.

Il est temps d'entrer dans le vif du sujet. Soyez en permanence sur vos aguets, faites détecter les pièges par votre ou vos voleurs, tout en ayant à l'esprit que certains pièges ne pourront être désamorcés si leur valeur de détection des pièges n'est pas assez haute... il faut parfois atteindre les 100 % dans cette compétence !

<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/TourDurlagrdc.png" alt=" " />
<table>
<tbody>
<tr>
<td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/piegedurlagrdc.png" alt=" " /></td>
<td>Le rez-de-chaussée, étant le plus accessible aux pilleurs (et aux touristes !), ne contient rien d'intéressant. Néanmoins, un piège vous attend...</td>
</tr>
</tbody>
</table>
Nous commençons par les étages, puis nous terminerons par les sous-sols, dans cette solution.

<hr />

Les cartes limitrophes de celle-ci sont :
<ul>
 	<li>le <a href="http://essaimigration.baldursgateworld.fr/content/festival-3122/">Festival de Nashkel</a> vers l'ouest ;</li>
 	<li>le <a href="http://essaimigration.baldursgateworld.fr/content/pont-de-flammevin-3118/">pont de Flammevin</a> au nord ;</li>
 	<li>et le <a href="http://essaimigration.baldursgateworld.fr/content/pied-des-montagnes-3128/">pied des montagnes</a> vers le sud.</li>
</ul>
<!--nextpage-->

Merci pour ton aide, en tout cas !


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#9 Le 26/02/2023, à 20:26

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

OK, c'est bien du HTML. Pas un sois-disant mélange d'autre chose.

Donc, apprends à utiliser xmlstarlet wink

C'est un projet pro?


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 26/02/2023, à 20:37

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Non, c'est du loisir.

Ben, y a des balises spécifiques à WordPress comme je le disais wink je ne sais pas si ça gêne. Par ailleurs, il n'y a pas de balises <p></p> pour les paragraphes (c'est en fait un import depuis un autre CMS qui fonctionnait en BBcode et qui a été converti en HTML).

Je vais voir si j'arrive à comprendre comment ça fonctionne. J'ai vaguement compris quelques trucs sur sed depuis cet après-midi, de même que sur les expressions régulières ; je n'ai jamais touché à ça auparavant et je n'ai aucune compétence en un quelconque langage, donc je n'ai pas la logique qui peut être nécessaire à ce genre d'exercices...


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#11 Le 26/02/2023, à 20:39

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

A toi de voir si tu veut apprendre à pécher au bazooka ou peindre à l'explosif. Je te donne les bonnes pratiques, fait-en ce que tu veut...


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#12 Le 26/02/2023, à 20:41

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Ben, c'est la question wink c'est du loisir, c'est pas mon domaine, je souhaite juste mettre en forme une encyclopédie sur WordPress sans devoir refaire manuellement des centaines d'articles et j'espérais passer par des outils relativement simples.

Au départ, j'espérais utiliser des requêtes SQL, d'ailleurs, mais les caractères d'échappement semblent compliqués à faire comprendre à MySQL.

Bref, je vais essayer de voir si j'ai le temps et les capacités à comprendre tout ça.

Merci pour tes réponses, en tout cas smile


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#13 Le 26/02/2023, à 20:43

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

La base de tout ça, c'est le shell et XPath. C'est pas si compliqué, j'ai fait le plus gros du taf en 10mn, tu a juste a affiner...


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#14 Le 26/02/2023, à 20:48

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

C'est toujours pareil, quand on sait faire, c'est facile et rapide wink dis-toi que c'est comme si je n'avais jamais parlé un mot de mandarin et que je devais m'y mettre là (C'est d'ailleurs le cas, pour le mandarin tongue).

Déjà, quand tu me parles de XPath, je ne sais pas ce que c'est (pour te donner une idée) ^^


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#15 Le 26/02/2023, à 20:56

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Question au poto ChatGPT:

Peut tu expliquer à un néophyte ce qu'est XPath avec des exemples et des ressources en lignes pour apprendre ?

XPath est une série de fonctions qui vous permet d'extraire des données à partir d'arbres XML et HTML. C'est un protocole spécifique qui se base sur la syntaxe XPath afin de parcourir les documents XML et HTML. XPath se compose d'expressions qui pointent vers certains éléments du document. Il peut s'utiliser pour trouver et extraire n'importe quel type d'éléments, y compris des entités, des attributs, des commentaires et des instructions de traitement.

Exemple :
Si nous prenons le document HTML suivant :

<html>
  <head>
    <title>Page Title</title>
  </head>
  <body>
    <h1>Mon titre</h1>
    <p>Mon paragraphe.</p>
  </body>
</html>

En utilisant XPath, vous pouvez sélectionner le titre de la page en utilisant la syntaxe suivante :

/html/head/title

Pour trouver un élément spécifique, vous pouvez également utiliser des nodes, des fonctions et des filtres. Par exemple, utilisons cette expression pour trouver le premier titre dans le document :

//*[@id="title"]

Pour en apprendre plus sur XPath, vous pouvez consulter la documentation officielle du W3C : https://www.w3.org/TR/xpath/


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#16 Le 26/02/2023, à 21:02

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

J'ai reposé la même question à ChatGPT, avec comme impératif une sortie en bbcode, il m'a donné d'autres ressources:

Peut tu expliquer à un néophyte ce qu'est XPath avec des exemples et des ressources en lignes pour apprendre ? La sortie doit etre en bbcode pour un forum

Le XPath (XML Path Language) est un langage de requête qui vous permet d'extraire des informations spécifiques à partir d'un document XML ou HTML. Il fonctionne similairement au langage SQL pour les bases de données.

Exemples :
• Récupérer le titre d'un document HTML : `//h1`
• Récupérer le texte d'un lien : `//a/text()`

Ressources apprendre :
OpenClassrooms : Apprenez à manipuler XML et XPATH
Webshaper : XPath et LINQ pour XML
Guru99 : XPath et Selenium
Learning Containers : Tutoriel XPath


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#17 Le 27/02/2023, à 09:26

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Pour finir, le dernier souci était que j'ajoutais après le nœud <tr> alors qu'il fallait ajouter dedans, donc la dernière commande est:

xmlstarlet edit -s '//table//tr' -t elem -n td -v '<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" "'  file.html  | xmlstarlet unesc

Ce qui donne au final:

# transforme du HTML invalide en HTML valide
xmlstarlet format -H file.html | sponge file.html 

# efface tous tes noeuds td
xmlstarlet edit -L -d '//table//tr//td'  file.html

# edite le HTML pour ajouter un nouveau noeud <td>
xmlstarlet edit -s '//table//tr' -t elem -n td -v '<img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" "'  file.html  |
    xmlstarlet unesc |
    sponge file.html

sponge du paquet moreutils permet d'afficher la sortie et de modifier le fichier en même temps.

Voici le résultat, qui j'espère corresponds à ta demande:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Example</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  </head>
  <body>
    <table>
      <tbody>
        <tr>
          <td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/fantome.png" alt=" "</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Peu importe si ton fichier a plus ne nœuds, XPath est sélectif et n'affecte que ce que tu lui demande. A essayer sur ton vrai fichier HTML.

做完了! big_smile

Dernière modification par sputnick (Le 27/02/2023, à 09:34)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#18 Le 27/02/2023, à 11:16

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Hello,

Merci pour la commande smile en fait je souhaite supprimer le tableau dans lequel est contenu cette image (et beaucoup d'autres, j'estime à peut-être 250 le nombre d'images que je souhaite "transformer") pour qu'elles apparaissent dans un paragraphe de texte et soit dotée de l'attribut CSS float left ou right selon les cas (left, ici, donc).

Je me rends compte que mon post initial n'était pas forcément très clair à ce sujet...

Je souhaite retirer les balises de tableaux pour ces images car elles s'affichent sur une hauteur de page trop importante. Mais j'ai des tableaux avec d'autres images (heureusement non contenues dans le même dossier donc j'espère pouvoir discriminer mes rechercher - remplacer grâce à leur URL) que je souhaite, elles, conserver dans leurs tableaux tongue

Je donne des liens pour que ce soit plus concret :

https://encyclopedies.baldursgateworld.fr/chateau-suif/ ici c'est l'article tel qu'il est actuellement. Les images sont contenues dans des tableaux (import de BBcode) et on voit que chaque tableau "repousse" logiquement le paragraphe qui suit plus bas.

https://encyclopedies.baldursgateworld. … lottantes/ ici, c'est le même article (enfin, son début) que je viens de dédoubler pour indiquer les bonnes balises aux images afin qu'elles flottent à gauche ou à droite du texte.

https://encyclopedies.baldursgateworld. … -niveau-1/ ici c'est un tableau avec des images que je souhaite conserver tel quel, donc il faut trouver une astuce pour discriminer les images (cfr leurs URLs différentes).


edit : au passage, il y a sans doute aussi moyen d'ajouter des balises <p> </p> aux paragraphes, qui n'en ont pas dans le code affiché par WordPress lorsqu'on édite ou crée un article ?

Dernière modification par Mornagest (Le 27/02/2023, à 11:17)


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#19 Le 27/02/2023, à 13:16

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

En fait, tu devrait éditer dans vim, en mode commande, pour ajouter la classe qui va bien sur les éléments que tu choisit selon leur contexte (en interactif) et effectivement, ton problème est mal décrit à la base, je pense que t'a focus sur sed en oubliant le contexte et le but à atteindre.

vim index.html
# dans vim en mode commande
:%s@<img \(src="http://www.baldursgateworld\)@<img class="img-soluce-left" \1@gc 

Si tu veut remplacer TOUTES les occurences de <img src="http://www.baldursgateworld\... alors, oui tu peut utiliser sed:

sed 's@<img \(src="http://www.baldursgateworld\)@<img class="img-soluce-left" \1@g' index.html

Dernière modification par sputnick (Le 27/02/2023, à 13:20)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#20 Le 27/02/2023, à 16:49

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

C'est toujours la même chose, on voit ce qu'on a comme souci et on n'arrive pas forcément à le décrire correctement ! Désolé pour la mauvaise rédaction.

Je vais voir avec Vim, je ne m'en suis pas servi depuis dix ans mais je pense que ça devrait le faire smile


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#21 Le 27/02/2023, à 21:15

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

OK, j'ai pu utiliser ta commande et je l'ai adaptée pour que ça colle au mieux à mon cas :

:%s@<table>\n<tbody>\n<tr>\n<td><img \(src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution.*\) alt="\(\) " /></td>\n<td>\(.*\)</td>\n</tr>\n</tbody>\n</table>@<img class="img-soluce-left" \1 alt="\2 ">\3\r@g

Ce paragraphe :

<hr />

<table>
<tbody>
<tr>
<td><img src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/erdane.png" alt=" " /></td>
<td>Non loin de votre lieu d'arrivée, vous voyez Erdane, qui peut vous vendre et vous acheter du matériel. Idéal pour éviter de devoir vous rendre à Nashkel pour revendre l'équipement que vous trouverez dans la tour.</td>
</tr>
</tbody>
</table>
En revanche, aucun moyen de se faire soigner ici. Il faudra alors aller à <a href="http://essaimigration.baldursgateworld.fr/content/nashkel-3121/">Nashkel</a>...

devient alors :

<hr />

<img class="img-soluce-left" src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution/erdane.png" alt=" ">Non loin de votre lieu d'arrivée, vous voyez Erdane, qui peut vous vendre et vous acheter du matériel. Idéal pour éviter de devoir vous rendre à Nashkel pour revendre l'équipement que vous trouverez dans la tour.

En revanche, aucun moyen de se faire soigner ici. Il faudra alors aller à <a href="http://essaimigration.baldursgateworld.fr/content/nashkel-3121/">Nashkel</a>...

Merci pour ton aide, Sputnick ! smile

Dernière modification par Mornagest (Le 27/02/2023, à 21:15)


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#22 Le 27/02/2023, à 21:17

sputnick

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Le c à la gin de la commande vim permet d'etre en mode interactif, des fois qu'il fasse faire le tri


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#23 Le 27/02/2023, à 21:18

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Oui, je l'ai enlevé pour mes essais mais je sais que mes (tableaux dans les) articles ont systématiquement la même structure.

Si je dois valider manuellement, je vais en avoir pour des centaines d'occurrences...


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#24 Le 28/02/2023, à 11:14

vv221

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Une p’tite correction. Cette expression :

:%s@<table>\n<tbody>\n<tr>\n<td><img \(src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution.*\) alt="\(\) " /></td>\n<td>\(.*\)</td>\n</tr>\n</tbody>\n</table>@<img class="img-soluce-left" \1 alt="\2 ">\3\r@g

devrait plutôt être :

:%s@<table>\n<tbody>\n<tr>\n<td><img \(src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution.*\) alt="\(.*\)" /></td>\n<td>\(.*\)</td>\n</tr>\n</tbody>\n</table>@<img class="img-soluce-left" \1 alt="\2">\3\r@g

La différence est au niveau de l’attribut alt de l’image.


En fait dans notre cas on peut probablement simplifier avec quelque chose dans ce style :

:%s@<table>\n<tbody>\n<tr>\n<td><img \(src="http://www.baldursgateworld.fr/filesmods/imagescms/bg1/solution[^>]*\) /></td>\n<td>\(.*\)</td>\n</tr>\n</tbody>\n</table>@<img class="img-soluce-left" \1 />\2\r@g

Ça passera tout aussi bien tant que les éléments img transformés n’incluent pas déjà d’attribut class.

Pour le nouveau type de motif que ça introduit, on remplace un . qui désigne n’importe quel caractère par [^>] qui désigne n’importe quel caractère sauf >. Pour résumer rapidement, [abc] c’est l’ensemble des caractères a, b et c, et [^abc] c’est l’ensemble de tous les caractères sauf les trois listés.


Jouer sur Ubuntu ? Facile !

Hors ligne

#25 Le 22/03/2023, à 10:20

Mornagest

Re : sed et regex => Vim ; autre souci guillemets anglais => français

Je relance le sujet pour exposer un autre souci que nous rencontrons.

WordPress convertit automatiquement les " " anglais en « » français, ce qui est louable dans l'absolu, mais a priori il n'arrive pas à déterminer par lequel il doit remplacer chaque ". C'est logique, puisque les guillemets anglais sont identiques.

Sauf que dans nos articles, on se retrouve avec des guillemets français de fermeture partout...

Exemple ici : https://encyclopedies.baldursgateworld. … x-mains-3/

Épée à deux mains +3 :  » Bord du Monde  »

Dans la fenêtre d'édition de l'article, on a bien ceci :

Épée à deux mains +3 : " Bord du Monde "

Donc on cherche une solution pour arriver, avec Vim, à remplacer les guillemets anglais correctement pour éviter cet affichage.

Toujours pour nous éviter une revue manuelle des 3600 articles de note encyclopédie... d'autant qu'on ne peut évidemment pas rechercher les articles concernés avec " puisque chaque balise HTML en contient, ou presque tongue donc tous les articles en contiennent forcément.

Si vous avez une idée, je prends ! smile merci d'avance !


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne