sed - protection chaine complexe

sed - protection chaine complexe - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 14-12-2011 à 17:03:46    

Bonjour à tous,
 
On m'a chargé de supprimer un compte twitter apparaissant sur toutes les pages du site web de ma boite. Le problème: le dev du site web au lieu d'utiliser footer.php, est passé sur TOUTES LES PAGES (140 environ) et a inscrit le code.
Mon problème est que j'arrive pas à protéger correctement ma chaine pour la virer avec sed.
 
Voici la chaine:

Code :
  1. <a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>


J'arrive à la protéger pour que grep la trouve, mais avec sed ça ne marche pas.
 
Voici la commande utilisée:
 

Code :
  1. find . -type f -exec sed -e 's#<a href=\"https:\/\/twitter.com\/camillerossi\"# #g{}' \;


J'ai remplacé les caractères de séparation par des # afin d'éviter d'interpréter les / dans la chaine. Je sais plus ce que j'ai essayé ou pas, et je vous avoue que la j'en ai marre.  
 
Si une bonne âme peut m'aider ..


Message édité par neyslim_benchmark le 14-12-2011 à 17:26:58
Reply

Marsh Posté le 14-12-2011 à 17:03:46   

Reply

Marsh Posté le 14-12-2011 à 17:08:47    

Si c'est sur une seule ligne tu ne peux pas changer ta stratégie et dire à sed de deleter la ligne qui matche ton pattern (style toute ligne qui matche camillerossi -> delete ?)

Reply

Marsh Posté le 14-12-2011 à 17:10:46    

sed '/pattern/d '  


devrait le faire

Reply

Marsh Posté le 14-12-2011 à 17:21:38    

o'gure a écrit :

Si c'est sur une seule ligne tu ne peux pas changer ta stratégie et dire à sed de deleter la ligne qui matche ton pattern (style toute ligne qui matche camillerossi -> delete ?)


Non c'est en plein milieu de la ligne, bien évidemment :)
 

o'gure a écrit :

sed '/pattern/d '  


devrait le faire


 
J'ai testé avec cette commande:

Code :
  1. find . -type f -exec sed '#<a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>#d' \;


 
Il ne me met pas d'erreur, mais par contre il fait rien. Je pense que c'est à cause des / que je n ai pas protégé, ou alors les ". Je tente et je te dis.
Merci de ton aide en tous cas.

Reply

Marsh Posté le 14-12-2011 à 17:25:55    

Peux-tu mettre un titre un peu... plus orienté sur ton problème ?

Reply

Marsh Posté le 14-12-2011 à 17:27:18    

Modération a écrit :

Peux-tu mettre un titre un peu... plus orienté sur ton problème ?


 
C'est bon, désolé ...

Reply

Marsh Posté le 14-12-2011 à 17:36:25    

o'gure a écrit :

sed '/pattern/d '  


devrait le faire


 
Bon je n'ai pas réussi, j'ai essayé avec ça:

Code :
  1. find . -type f -exec sed '/<a href=\"https:\/\/twitter.com\/camillerossi\" class=\"twitter-follow-button\" data-show-count=\"false\">Follow @camillerossi<\/a><script src=\"\/\/platform.twitter.com\/widgets.js\" type=\"text\/javascript\"><\/script>/d ' \;


 
Et aussi avec # comme séparateur, mais rien.
J'essaye des trucs ...

Reply

Marsh Posté le 14-12-2011 à 17:56:03    

Bah je continuerai demain, j'en ai marre.

Reply

Marsh Posté le 14-12-2011 à 18:07:30    

sed bosse ligne à ligne, ton html peut être sur plusieurs lignes (et on peut foutre les attributs un peu où on veut) donc sed est peut-être pas le meilleur outil pour ça (un peu de xslt si c'est du xhtml serait bien mieux).

 

Sinon ça marche très bien, pas besoin de tout protéger partout hein :o

 

Sans sed


$echo '<a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript" </script>'

 

<a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>

 

Avec sed


$echo '<a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>' | sed -e 's#<a href="https://twitter\.com/camillerossi"#XXX#'

 

XXX class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>

Message cité 1 fois
Message édité par Xavier_OM le 14-12-2011 à 18:12:10

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 14-12-2011 à 18:17:29    

neyslim_benchmark a écrit :


 
Bon je n'ai pas réussi, j'ai essayé avec ça:

Code :
  1. find . -type f -exec sed '/<a href=\"https:\/\/twitter.com\/camillerossi\" class=\"twitter-follow-button\" data-show-count=\"false\">Follow @camillerossi<\/a><script src=\"\/\/platform.twitter.com\/widgets.js\" type=\"text\/javascript\"><\/script>/d ' \;




n'utilise pas d comme action si tu ne veux pas supprimer toute la ligne.

Reply

Marsh Posté le 14-12-2011 à 18:17:29   

Reply

Marsh Posté le 15-12-2011 à 10:45:15    

Xavier_OM a écrit :

sed bosse ligne à ligne, ton html peut être sur plusieurs lignes (et on peut foutre les attributs un peu où on veut) donc sed est peut-être pas le meilleur outil pour ça (un peu de xslt si c'est du xhtml serait bien mieux).
 
Sinon ça marche très bien, pas besoin de tout protéger partout hein :o
 
Avec sed


$echo '<a href="https://twitter.com/camillerossi" class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>' | sed -e 's#<a href="https://twitter\.com/camillerossi"#XXX#'
 
XXX class="twitter-follow-button" data-show-count="false">Follow @camillerossi</a><script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>



 
Alors ce code est bien sur une seule ligne, mais au milieu. Par contre chose intéressante, je me suis rendu compte que effectivement "echo x | sed ..." ca fonctionne, mais pas avec "find -exec", et c'est peut-être la le problème. Je vais essayer une autre méthode que find.

Reply

Marsh Posté le 15-12-2011 à 11:04:52    

Bon alors attendez avant de m'aider parce que je viens à peine de comprendre que sed travaille sur l'affichage mais n'écrit pas sur le fichier :D hum ...
 
Je vous dis quand j'ai réussi.

Reply

Marsh Posté le 15-12-2011 à 11:06:17    

neyslim_benchmark a écrit :

Bon alors attendez avant de m'aider parce que je viens à peine de comprendre que sed travaille sur l'affichage mais n'écrit pas sur le fichier :D hum ...
 
Je vous dis quand j'ai réussi.


et depuis le temps, tu aurais peut être déjà fini la méthode manuelle sur les 140pages :hello:


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
Reply

Marsh Posté le 15-12-2011 à 11:08:01    

Ben plus ou moins, vu que je fais du support sur des équipements télécom en même temps, mais bon au moins je commence à piger la méthode ^^

Reply

Marsh Posté le 15-12-2011 à 11:10:21    

neyslim_benchmark a écrit :

Bon alors attendez avant de m'aider parce que je viens à peine de comprendre que sed travaille sur l'affichage mais n'écrit pas sur le fichier :D hum ...
 
Je vous dis quand j'ai réussi.


man sed [:spamafote]
option -i pour modifier le fichier, sinon c'est clairement dit que l'output par défaut est le "standard output". Ce qui te permet de faire garder l'original et de faire les modifications vers un répertoire résultat avec les redirections classiques du shell.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed