Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 12 messages ] 
Auteur Message
MessagePosté: 19 Déc 2011 17:50 
Hors ligne
Nouvel utilisateur

Inscription: 16 Sep 2011 23:22
Messages: 24
Bonjour,

Je voudrais, pour une série de fichiers, remplacer "droite" par "suivant" dans "<a class="defileur" href="next.html" >droite</a>"

Comment le faire en un seule opération avec un script bash ?

Merci


Haut
 Profil  
 
MessagePosté: 19 Déc 2011 19:05 
En ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2356
Avec sed -i ça marchera. Si toutes tes occurrences de "droite" sont bien entre des balises <a> je te conseille fortement de remplacer ">droite<" par ">suivant<" et non pas "droite" par "suivant" ça évitera que d'autres mots contenant "droite" ne soient affectés.
Après la commande exacte va dépendre de ta structure de répertoires (tous les fichiers dans un seul, ou bien dans une arborescence ?).

Par exemple :
Code:
sed -i~ 's@>droite<@>suivant<@g' *.html

Si tu as une arborescence tu peux utiliser find pour déterminer la liste des fichiers, que tu passeras à sed par exemple avec xargs ou directement avec l'option -exec de find.

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
MessagePosté: 19 Déc 2011 19:05 
En ligne
Administrateur du forum
Avatar de l’utilisateur

Inscription: 15 Oct 2004 01:13
Messages: 19018
Localisation: Périgord
Ce fil aurait mieux eu sa place dans "programmation".
Tu peux le doubler si tu veux.

_________________
"L'action est plus efficace que la polémique, mais plus rare."
"Pas de Droite, pas de Gauche mais "ailleurs et partout", "Franchouillard" et même pas honte !
Ricardo (1936-...)


Haut
 Profil  
 
MessagePosté: 19 Déc 2011 23:19 
Hors ligne
Nouvel utilisateur

Inscription: 16 Sep 2011 23:22
Messages: 24
Merci syam, c'est tout bon.

J'ai encore un petit problème avec la commande :

sed -i~ 's@<div class="defileur"><a class="defileur" href="*.html">suivant</a></div>@<a class="defileur" href="*.html">suivant</a>@g' *.html

... qui n'a aucun effet. Je crois comprendre que le problème se situe au niveau du deuxième "*" (il faut conserver le nom du fichier mentionné dans href) mais je connais pas la solution.


PS : Désolé ricardo, j'avais pas vu la section "programmation". Il y a-t-il moyen de déplacer tout en bloc là bas ?


Haut
 Profil  
 
MessagePosté: 19 Déc 2011 23:56 
En ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2356
François a écrit:
sed -i~ 's@<div class="defileur"><a class="defileur" href="*.html">suivant</a></div>@<a class="defileur" href="*.html">suivant</a>@g' *.html

... qui n'a aucun effet. Je crois comprendre que le problème se situe au niveau du deuxième "*" (il faut conserver le nom du fichier mentionné dans href) mais je connais pas la solution.

sed a une syntaxe "expressions régulières" et non pas "glob" comme le shell (voir ici : http://www.grymoire.com/Unix/Regular.html).
Code:
sed -i~ 's@<div class="defileur"><a class="defileur" href="\(.*\)\.html">suivant</a></div>@<a class="defileur" href="\1.html">suivant</a>@g' *.html

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
MessagePosté: 20 Déc 2011 01:57 
En ligne
Administrateur du forum
Avatar de l’utilisateur

Inscription: 15 Oct 2004 01:13
Messages: 19018
Localisation: Périgord
François a écrit:
Merci syam, c'est tout bon.

J'ai encore un petit problème avec la commande :

sed -i~ 's@<div class="defileur"><a class="defileur" href="*.html">suivant</a></div>@<a class="defileur" href="*.html">suivant</a>@g' *.html

... qui n'a aucun effet. Je crois comprendre que le problème se situe au niveau du deuxième "*" (il faut conserver le nom du fichier mentionné dans href) mais je connais pas la solution.


PS : Désolé ricardo, j'avais pas vu la section "programmation". Il y a-t-il moyen de déplacer tout en bloc là bas ?


Je le fais.

_________________
"L'action est plus efficace que la polémique, mais plus rare."
"Pas de Droite, pas de Gauche mais "ailleurs et partout", "Franchouillard" et même pas honte !
Ricardo (1936-...)


Haut
 Profil  
 
MessagePosté: 20 Déc 2011 10:45 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 25 Avr 2006 10:30
Messages: 1411
Localisation: grenoble
Bonjour

j'ai toujours fait mes recherches avec s/motifachanger/motifremplace/g

Quelle est la différence avec @ à la place de / ?
J'utilise vim mais avec sed je n'ai pas eu de problème avec s/.../.../

_________________
I love vim


Haut
 Profil  
 
MessagePosté: 20 Déc 2011 11:35 
En ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2356
limax a écrit:
Quelle est la différence avec @ à la place de / ?

Strictement aucune, juste une habitude que j'ai prise. Ça permet d'utiliser / dans les expressions (ce qui m'arrive régulièrement) sans devoir l'échapper, et accessoirement je trouve ça beaucoup plus lisible.

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
MessagePosté: 20 Déc 2011 19:20 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 25 Avr 2006 10:30
Messages: 1411
Localisation: grenoble
ok il n'y a donc pas différence.
merci pour la réponse.

_________________
I love vim


Haut
 Profil  
 
MessagePosté: 20 Déc 2011 22:48 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 332
Localisation: Aisne
perl -pE 's/regex_a_substituer/remplacement/igms' ./lesfichiers*

( avec l'avantage de la souplesse et la puissance des regex de Perl )

_________________
Précédent: Carte K7S5A cpu: AMD 1200 MHz Lenny 2.6.26-2-686.

Actuel: Carte EVGA Classified SR-2, 2 cpu "Intel Xeon CPU X5672 3.20GHz"
mem: 8 x "2GiB DIMM 1333 MHz", 4 ddurs "1TB SAMSUNG HD103SJ"
Squeeze 2.6.32-5-amd64.


Haut
 Profil  
 
MessagePosté: 21 Déc 2011 11:03 
Hors ligne
Nouvel utilisateur

Inscription: 16 Sep 2011 23:22
Messages: 24
Merci Syam pour ta solution (qui fonctionne nickel) et le manuel regex. Je pense piger la signification de tous les éléments de ta solution, à l'exception de la fonction du troisième backslash dans "\(.*\)\.html"


Haut
 Profil  
 
MessagePosté: 21 Déc 2011 11:52 
Hors ligne
Fan des forums debian-fr.org!
Avatar de l’utilisateur

Inscription: 18 Mai 2006 09:28
Messages: 5199
Localisation: En mouvement
C'est pour échapper le point, qui est caractère spécial.

_________________
"The charger is empty, look ..." (Kurt Cobain - 5 avril 1994)


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 12 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.140s | 11 Queries | GZIP : Off ]