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 14/01/2012, à 17:21

Encrypt

Suppression de code de manière récursive dans plusieurs fichiers.

Bonjour à tous !

Je me permets d'ouvrir ce post car j'ai récemment créé un site internet grâce un site gratuit m’offrant la possibilité de coder avec leur CMS, et de publier mes articles sans trop se faire de tracas (Surtout sans connaître le HTML... mais je me débrouille quand même quand ça ne fonctionne pas).

Sauf que récemment, un de mes camarades m'a conseillé d'avoir un "vrai" site internet, chez un hébergeur gratuit.

Je me suis alors inscrit chez cet hébergeur, mais appréciant le design de mon site et étant habitué au CMS dudit outil de création de site web, j'ai décidé de faire basculer l'intégralité de ce dernier grâce à un petit wget dans la console, puis j'ai tout transféré vers le serveur à l'aide de filezilla.

Sauf que malheureusement, les publicités finançant mon site sur l'ancien hébergeur sont restées... J'ai tout de même réussi à les enlever une par une en trouvant les différents blocs de code HTML (Java), puis en les supprimant à la main à l'aide d'un rechercher/remplacer sous gedit.

Mon problème : A chaque nouvel article que je publie(rai), les menus de mon site changent, ce qui m'oblige(ra) alors à tout recommencer... Vous comprendrez donc que malgré le fait que je sois patient, j'aimerais m'éviter ce travail à chaque fois.

Mes questions : Sauriez-vous comment supprimer ces blocs de code (Contenant espaces et retour chariot) dans tous les fichiers HTML de mon site, après wget ? Y aurait-il une commande qui pourrait supprimer ces blocs de code ?

Merci d'avance pour votre réponse !
Encrypt

P.S : Un grand bravo à tous les utilisateurs de ce forum ! Étant nouveau ici, je dois dire qu'à chaque fois que j'ai un pépin, je sais que ma réponse se trouve sur ubuntu-fr.org (forum ou tutoriels), et la solution fonctionne toujours parfaitement ! smile


Mon site web d'astuces informatique, téléphonie, réseau ; hébergé sur mon Raspberry Pi, couplé au superbe serveur HTTP Nginx : http://www.encrypt-tips.tk  //  Followez-moi sur Twitter à @encrypttips ! :)

Hors ligne

#2 Le 14/01/2012, à 20:36

neodc

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Je suis loin d'être un pro, mais je te conseille de regarder du côté de la commande "sed". Avec un truc du genre (en te placent dans le bon dossier) :

sed -i 's/<le code que tu veux retirée>//g' *

Dernière modification par neodc (Le 14/01/2012, à 20:37)

Hors ligne

#3 Le 21/01/2012, à 15:54

Encrypt

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Bonjour neodc,

Je suis désolé de vous répondre si tard, mais étant en prépa scientifique MPSI, le temps me manque... En tout cas, merci pour votre réponse !

Cependant, je suis encore gêné avec les retours chariot de mon code... du coup, lorsque j'insère le code à enlever, la console prend ça comme une exécution de la commande, ce qui aboutit à de magnifiques erreurs...

J'ai lu ici et là qu'on pouvait dire à sed de supprimer les lignes de l'expression XXXXXX jusqu'à l'expression YYYYYY. Peut-être puis-je m'orienter de ce côté là ?

Ou alors, quelqu'un saurait-il s'il est possible de mettre les bouts de code à supprimer dans un fichier texte et de dire à la commande : A chaque fois que tu vois dans le fichier HTML le code du fichier texte, enlève-le ?

En tout cas, il semblerait que ce que je souhaite faire soit plutôt complexe... ou alors, je n'ai pas les bons outils...

Merci d'avance pour vos réponses !

Encrypt


Mon site web d'astuces informatique, téléphonie, réseau ; hébergé sur mon Raspberry Pi, couplé au superbe serveur HTTP Nginx : http://www.encrypt-tips.tk  //  Followez-moi sur Twitter à @encrypttips ! :)

Hors ligne

#4 Le 21/01/2012, à 16:55

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Premier élément de réponse:

Encrypt a écrit :

J'ai lu ici et là qu'on pouvait dire à sed de supprimer les lignes de l'expression XXXXXX jusqu'à l'expression YYYYYY. Peut-être puis-je m'orienter de ce côté là ?

sed '/XXXXXX/,/YYYYYY/d' fichier

Je n'utiliserai l'option -i que quand ça marche correctement car ça écrase l'original.

Edit:  tu peux enchaîner les section, p.e.

sed '/aaa/,/bbb/d;/ccc/,/ddd/d;/eee/,/fff/d' fichier

Edit:  Mais le plus flexible est de mettre toutes les commandes dans un fichier, une par ligne, et d'utiliser l'option -f de sed.

Dernière modification par aduxas (Le 21/01/2012, à 17:05)

Hors ligne

#5 Le 21/01/2012, à 17:45

Encrypt

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Merci aduxas pour ton aide !

J'ai en effet réussi à faire ce que je souhaitais... Enfin, je le touche du doigt !

Cependant, il me reste un petit souci : Dans le dernier bloc que je souhaite supprimer, j'enlève les lignes de l'expression x à l'expression y, sauf qu'il faudrait que je supprime la ligne d'après en plus ! C'est une ligne qui contient des </div>, autant dire que je ne peux me permettre de la laisser...

Ainsi, saurais-tu dire à sed "Supprime les lignes de l'expression XXXXXX jusqu'à l'expression YYYYYY PLUS la suivante" ?

Sinon, pour le coup des ";" entre les expressions, bonne idée ! Moi, je pensais y aller plus bourrin avec des && (Ça aurait été un peu plus lourd...)

Merci d'avance !
Encrypt


Mon site web d'astuces informatique, téléphonie, réseau ; hébergé sur mon Raspberry Pi, couplé au superbe serveur HTTP Nginx : http://www.encrypt-tips.tk  //  Followez-moi sur Twitter à @encrypttips ! :)

Hors ligne

#6 Le 21/01/2012, à 20:19

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Je reviens en arrière....

$ cat SUP
/XXXXX/,/YYYYY/{
/YYYYY/{N;d}
d
}
$ sed -f SUP fichier

C'est moche, mais je crois que ça marche.  Désolé pour les aller-retour.

Dernière modification par aduxas (Le 21/01/2012, à 20:45)

Hors ligne

#7 Le 21/01/2012, à 20:39

Encrypt

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Merci encore de m'aider !

Cependant, par rapport à votre code, comment l'entrer dans le terminal ? Car il ne comprend pas vraiment bien ce que je lui dit, et répond que les commandes sont inconnues...  Je crée un fichier !bin/bash ?

Ah, également : le "SUP" dans le fichier, c'est à laisser tel quel ? Ou est-ce à remplacer par un nom de fichier ou quelque chose comme ça ? Si j'ai bien compris, c'est une sorte d'allias... donc faut pas y toucher...

Encrypt

Dernière modification par Encrypt (Le 21/01/2012, à 20:43)


Mon site web d'astuces informatique, téléphonie, réseau ; hébergé sur mon Raspberry Pi, couplé au superbe serveur HTTP Nginx : http://www.encrypt-tips.tk  //  Followez-moi sur Twitter à @encrypttips ! :)

Hors ligne

#8 Le 21/01/2012, à 20:45

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Non, tu copies les commandes sed (les quatre lignes de l'exemple) dans un fichier que t'appelles SUP, puis tu tapes la commande sed.

Hors ligne

#9 Le 21/01/2012, à 23:37

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Encrypt a écrit :

Ah, également : le "SUP" dans le fichier, c'est à laisser tel quel ?

SUP, c'est le nom du fichier;  la commande "cat" ne sert qu'à montrer son contenu.  On peut faire la même chose directement sur une ligne de commande, mais c'est plus facile avec un fichier de commandes sed:  tu y répètes le bloc autant de fois qu'il te faut avec les chaînes délimitantes qu'il te faut.

Dernière modification par aduxas (Le 21/01/2012, à 23:39)

Hors ligne

#10 Le 22/01/2012, à 00:33

Encrypt

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Ça y est, j'ai réussi !!!

Un grand merci à aduxas pour son aide ! J'ai finalement opté pour des remplacements en cascade à l'aide de sed.

Par rapport à la "suppression de la ligne suivante", je ne l'ai finalement pas utilisé mais ai rusé à l'aide de sed !

En effet, pour le bloc problématique en question, j'en ai d'abord supprimé un bout (au milieu) ce qui m'a supprimé l'avant-dernière ligne avec </div>. Il me suffisait alors de rappliquer sed en partant du début du bloc, jusqu'à la dernière balise </div> alors libérée !

Encore merci !
Encrypt


Mon site web d'astuces informatique, téléphonie, réseau ; hébergé sur mon Raspberry Pi, couplé au superbe serveur HTTP Nginx : http://www.encrypt-tips.tk  //  Followez-moi sur Twitter à @encrypttips ! :)

Hors ligne

#11 Le 22/01/2012, à 21:17

pingouinux

Re : Suppression de code de manière récursive dans plusieurs fichiers.

@aduxas #6 : Ton script peut, je pense, être légèrement simplifié

$ cat SUP
/XXXXX/,/YYYYY/{
/YYYYY/{N}
d
}

Hors ligne

#12 Le 22/01/2012, à 21:52

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Merci, pingouinux, t'as raison, le "d" final enlève toute la pattern space, même s'il y a deux lignes dedans.  Comme quoi les {} autour de N ne sont plus nécessaires non plus.

Je n'aime pas trop la répétition de la 2ème chaîne mais je n'ai rien trouvé de mieux.  J'avoue avoir eu un peu de mal.  Je pense qu'il faut interpréter /XXXXX/,/YYYYY/ comme une boucle:  sed exécutera ces commandes autant de fois qu'il y a de lignes, pas nécessairement que pour la ligne courante.  Il est facile de se désynchroniser...

Hors ligne

#13 Le 22/01/2012, à 22:24

pingouinux

Re : Suppression de code de manière récursive dans plusieurs fichiers.

@aduxas : On peut encore simplifier

$ cat SUP
/XXXXX/,/YYYYY/{N;d}

Attention : Cette simplification n'est pas correcte dans tous les cas (voir message #17)

Dernière modification par pingouinux (Le 23/01/2012, à 19:19)

Hors ligne

#14 Le 22/01/2012, à 22:32

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

sûr?

je pense que t'es en train de suivre dans mes traces qui mènent nulle part...

J'avais ça aussi, et je ne comprends toujours pas pourquoi ça ne marche pas.

Dernière modification par aduxas (Le 22/01/2012, à 22:41)

Hors ligne

#15 Le 23/01/2012, à 10:44

pingouinux

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Bonjour aduxas,

D'après le man et les essais que j'ai faits, voici ce que je comprends :

  • XXXXX et YYYYY doivent se trouver sur des lignes différentes,

  • Les commandes entre { } sont appliquées à partir de la ligne contenant XXXXX, jusqu'à celle contenant YYYYY si elle existe, ou jusqu'au bout du fichier sinon.

Éventuellement, je veux bien jeter un œil à ton test qui ne fonctionne pas, si ça peut éclairer notre lanterne.

Cordialement

Hors ligne

#16 Le 23/01/2012, à 18:08

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Bonjour pingouinux,

$ cat A.txt
a
b
c
d
e
f
g
h
$ sed '/c/,/d/{N;d}' A.txt
a
b
$ sed '/c/,/d/{/d/N;d}' A.txt
a
b
f
g
h

Hors ligne

#17 Le 23/01/2012, à 18:32

pingouinux

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Je crois avoir compris, et ma simplification du #13 n'était pas correcte. Dans ton exemple, c et d sont sur 2 lignes consécutives. Après avoir concaténé ces 2 lignes, sed ne trouve plus la 2ème chaîne sur les lignes suivantes, et va jusqu'au bout. Dans mes tests, j'avais une ligne intermédiaire, et n'ai pas vu l'anomalie.

$ cat A.txt
a
b
c
cc
d
e
f
g
h
$ sed '/c/,/d/{N;d}' A.txt
a
b
f
g
h
$ sed '/c/,/d/{/d/N;d}' A.txt
a
b
f
g
h

Hors ligne

#18 Le 23/01/2012, à 18:44

aduxas

Re : Suppression de code de manière récursive dans plusieurs fichiers.

Exact.  je crois qu'on a fait le tour.

Hors ligne