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 11/01/2008, à 12:59

Loiseau2nuit

un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

OK alors suite à  ce topic ci (taggué RESOLU depuis d'o๠un nouveau topic...) à  mon tour maintenant de titiller un peu les je cite-"vieux schnoks" de la ligne de commande tongue

.. ou les petits bleus KDEtistes comme moi qui auront tendance à  préférer KFileReplace puisque le soft est pour ma part déjà  installé.

Voici mon problème :

Dans un site web, je dois remettre à  jour mon design en remplacant certaines occurences par d'autres.

J'ai déjà  pu tester via KFileReplace un "remplacer '#PAGINATION' par '#PAGINATION{page}' ca ok c'était facile.

par contre là , je dois m'amuser à  remplacer des occurences du style '#DOSSIER_SQUELETTES/img/mon_image.gif' par une autre occurence du style '#CHEMIN{img/mon_image.gif}'

Bien entendu  'img/mon_image.gif' n'est pas une expression fixe puisque dans mon site, toutes les images sont appelées comme ça et il faudrait que le traitement ne touche pas à  cette portion d'arborescence. Et là  je ne sais pas trop comment formuler ma requète. KFile ? Commande ? Danser nu sous la lune au prochain soltice d'été ???

Si quelqu'un a une idée wink

Merci smile


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#2 Le 11/01/2008, à 14:13

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Salut

il faut utiliser des parenthèses de mémorisation :

"s,#DOSSIER_SQUELETTES/\([^']*\),#CHEMIN{\1},g"

On met entre \( et \) la partie du motif qu'on souhaite capturer, puis, dans la partie "remplacement", on y fait référence avec \1 (ou le numéro correspondant s'il y a plusieurs parenthèses) pour récupérer la valeur, inchangée donc.


Je suppose que Kfilereplace peut aussi faire quelque chose d'aussi utile (je n'en sais rien en fait, je ne l'utilise pas), donc tu peux certainement le faire avec l'un ou l'autre.

Selon le type d'expressions rationnelles, on doit échapper ou non les parenthèses. La syntaxe pour récuperer la valeur capturée peut aussi être du type $1

Quoi qu'il en soit, fait d'abord une sauvergarde et un essai wink

Dernière modification par Alain.g (Le 11/01/2008, à 14:32)


Xubuntu Karmic !

Hors ligne

#3 Le 11/01/2008, à 14:13

Fake

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Je ferais comme ca mais je suis pas un pro du tout...

#!/bin/sh
cd #DOSSIER_SQUELETTES
# on veut faire un copie de tous les fichiers .gif
for i in ./*.gif ; do
      cp "$i" "#CHEMIN/$i"
done

[edit] : suppression du test qui ne sert surement a rien..

Mais je sais pas si cp sait creer les dossiers parents... genr cp .gif.gif ./GIF/gif.gif crée-t-il le dossier GIF si il est inexistant???

Dernière modification par Fake (Le 11/01/2008, à 14:19)

Hors ligne

#4 Le 11/01/2008, à 15:31

Loiseau2nuit

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Merci Alain, j'essaie ca de suite wink

A Fake, je crois que tu n'as pas du comprendre ma question. Il ne s'agit pas de faire une copie en série de toutes mes images (pour ca d'ailleurs, j'utilise ImageMagick, à  qui je peux même passer des paramètres de retouche)

Il s'agit juste de remplacer certains tronçons de code par d'autre, sans toucher aux appels des images contenus dans ces tronçons de code.

Quoiqu'il en soit merci à  vous 2 wink


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#5 Le 11/01/2008, à 15:42

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Après avoir regardé un peu kfilereplace, j'ai l'impression qu'on ne peut pas faire de références arrières avec celui-ci !

Quelqu'un confirme ?

ça serait quand même une très grosse limitation hmm


Xubuntu Karmic !

Hors ligne

#6 Le 11/01/2008, à 15:48

Jah

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

La version pour KDE4 est sortie, tu peux la tester pour voir.
Elle est dans les dépots

deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy main

mais cela risque de te demander plein de dépendances, a toi de voir.

Hors ligne

#7 Le 11/01/2008, à 16:27

Loiseau2nuit

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Mouep ben navré mais je n'y arrive toujours pas. J'ai tenté via KFileReplace en utilisant tes occurences mais le résultat est néant.

Quand à  la ligne de commande, j'ai ajouté tes arguments dans les commandes dont on parlmait dans le précédent topic mais rien n'y fait mes #DOSSIER_SQUELETTE sont toujours en place. sad

Une autre idée ?

En tout cas merci encore d'avoir essayé wink


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#8 Le 11/01/2008, à 16:33

Loiseau2nuit

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Alain.g a écrit :

Après avoir regardé un peu kfilereplace, j'ai l'impression qu'on ne peut pas faire de références arrières avec celui-ci !

Quelqu'un confirme ?

ça serait quand même une très grosse limitation hmm

Y aurait-il un équivalent qui gère ce genre d'expression ?


(HS : vous devriez regarder la 5ème, il y a un excellent reportage sur Google)


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#9 Le 11/01/2008, à 16:37

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Tu as du mal t'y prendre.
Quelle ligne as-tu utilisée précisément ?
Etais-tu positionné dans le bon dossier avec la console ?

Preuve que ça fonctionne:

echo "'#DOSSIER_SQUELETTES/img/mon_image.gif'" | sed "s,#DOSSIER_SQUELETTES/\([^']*\),#CHEMIN{\1},g"

renvoie bien '#CHEMIN{img/mon_image.gif}'


Xubuntu Karmic !

Hors ligne

#10 Le 11/01/2008, à 17:47

Loiseau2nuit

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

D'accord ! Je constate que je n'ai pas du être très clair.

Le fait est que dans mon dossier j'ai une cinquantaine de fichiers à  traiter, avec dans chacun plusieurs occurences comme celle-ci.

En fait je cherche juste dans TOUS ces fichiers, à  remplacer ces occurrences.


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#11 Le 11/01/2008, à 17:54

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

J'avais bien compris smile C'est juste un exemple pour te montrer que le motif est correct...

donc je repose mes questions :
Quelle ligne as-tu utilisée précisément ?
Etais-tu positionné dans le bon dossier avec la console ?

Dernière modification par Alain.g (Le 11/01/2008, à 17:55)


Xubuntu Karmic !

Hors ligne

#12 Le 20/01/2008, à 19:16

Folken Laëneck

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Bonjour,

Je me permet de remonter ce topic d'une part parce qu'il n'est pas si vieux que cela et d'autre part parce qu'il serait je pense inutile d'en créer un nouveau alors que mon problème est excatement le même que celui de Zzz.

Je suis en train de reprendre un site web programmé en PHP pour y faire quelques modifications, notamment sur la gestion des langues. J'aurais besoin de faire un remplacement dans tous mes fichiers .php d'un appel à  une variable par un appel à  une fonction.
En clair, j'aimerais remplacer toutes les occurences de "$__traduction['un_identifant_de_traduction_quelconque']" ou "$__traduction[$identifiant_trad]" - quand j'utilise une variable - par "get_traduction(le_contenu_des_précédents_crochets).

Je suis plus ou moins coutumier des regex en PHP mais là  je dois avouer que je seche sur le motif à  passer à  sed. Soit il me dit que la référence est invalide, soit il ne renvoie aucune erreur mais ne modifie rien non plus ... Après de nombreux essais, j'en suis arrivé à  ceci :

find ./. -type f -exec sed -i "s#\$__traduction\[\([^\]]+\)\]#get_trad(\1)#g" {} \;

Quelqu'un peut-il me dire ce qui cloche ?

Pour ne pas uniquement poser une question :
> Alain.g : Je confirme, KFileReplace ne peut pas utiliser les références arrières. Je trouve ça fort dommage ... Accessoirement, il utilise aussi la syntaxe de régex Qt, qui diffère encore un peu des autres syntaxes. Histoire de faire simple quoi :]

Dernière modification par Folken Laëneck (Le 20/01/2008, à 19:45)

Hors ligne

#13 Le 20/01/2008, à 20:12

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Merci pour la confirmation.

Par rapport à  ce que tu as fait, il faudrait échapper le + et au contraire enlever l'antislash devant le crochet (bizarre mais bon...)

"s#__traduction\[\([^]]\+\)\]#get_trad(\1)#g"

pour plus de lisibilité, tu peux ajouter l'option -r, qui permettra de ne plus échapper les parenthèses et le +:

sed -r -i "s#__traduction\[([^]]+)\]#get_trad(\1)#g"

Si tu veux des regex pcre, comme on peut en avoir en php, installe ssed ("super sed", il est dans les dépà´ts sous le nom ssed) et utilise le avec l'option -R (en majuscule cette fois)

Dernière modification par Alain.g (Le 20/01/2008, à 20:17)


Xubuntu Karmic !

Hors ligne

#14 Le 20/01/2008, à 20:17

Folken Laëneck

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Ca marche, merci beaucoup smile

J'avoue que je n'aurais jamais pensé à  échapper le + ... J'ai encore pas mal de chose à  apprendre sur les regex

Hors ligne

#15 Le 24/01/2008, à 01:13

Loiseau2nuit

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Ouep moi aussi hmm

Désolé, je lis tout juste vos échanges, j'ai été comment dire... quelque peu absent du réseaux ces derniers jours.

En fait pour répondre à  ta question alain, j'ai employé à  peu près toutes les possibilités proposées dans ce topic http://forum.ubuntu-fr.org/viewtopic.php?id=169895 auquel tu as participé également à  ce que je peux revoir, en utilisant tes motifs à  la place de ceux proposés dans le topic qui était supposés remplacer un simple mot en majuscule par le même en minuscule.

J'ai bien regardé toutes les commandes proposées en analysant un peu leurs options, mais rien. en fait la seule comande qui semble t'il ait bien fonctionné, c'est

$ for i in `find . -type f`; do cat $i | sed -re "s,#DOSSIER_SQUELETTES/\([^']*\),#CHEMIN{\1},g" > $i.bak && mv $i.bak $i; done

et encore, quand je dis "bien" c'est un bien grand mot. disons qu'elle m'a bien dupliqué tous mes fichiers (images y compris) de manière récursive mais sans appliquer la modification demandée ni dans les originaux, ni dans les .bak

au final, j'ai opté pour un remplacement à  la mano parce qu'il fallait vraiment que j'avance sur mon projet mais j'aimerais quand même bien avoir un fin mot de l'histoire. J'ai conservé la copie faite de mon template au cas oà¹, je voudrais bien  retester dessus.

En tout cas, déjà  un gros merci pour ces infos et pour les tentatives de coups de mains.

Je reste à  l'écoute.
*
Bonne nuit à  tous smile


DESKTOP LinuxMint 20.1 Ulyssa XFCE | CPU AMD64 5000+ 2x1600 MHz 64bits | RAM 4Go
Graph RV516 [Radeon X1300/X1550 Series] /!\ GLX ATI RV515 v2.1 Mesa 19.1.4 | HDD [ / 64Go ] SSD + [ /home 150Go /swap 8Go ] SATA2
----
Brèves de Hotline: #merci2votreappel

Hors ligne

#16 Le 24/01/2008, à 04:03

Alain.g

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Salut Zzz.

Je ne peux pas te donner grand chose de plus, tu as déjà  tout pour que ça fonctionne : la commande sed à  appliquer, donnée dès mon premier poste, et la manière de l'appliquer récursivement, que tu as trouvé dans la page que tu as indiquée.
en mixant les deux donc :

find . -type f -exec sed -i "s,#DOSSIER_SQUELETTES/\([^']*\),#CHEMIN{\1},g" {} \;

Si ça ne fonctionne pas, il faut mieux que tu colles ici un extrait du code à  remplacer.
Par exemple les ' englobants, font-ils parties du code ou est-ce toi qui les utilises pour citer sur le forum ?

Par rapport à  find, il est largement mieux d'indiquer sur quel type de fichier précisément doit s'accomplir l'action, via l'extension.
Par exemple si c'est sur des pages .php : -name '*.php'

Dernière modification par Alain.g (Le 24/01/2008, à 10:47)


Xubuntu Karmic !

Hors ligne

#17 Le 06/08/2008, à 23:06

koralis

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Bonjour,

Ha les SED et les GREP et REGEX ne sont pas mes amis.

Voilà mon problème.
Le fichier bookmark.html de firefox devient vite énorme à cause de l'enregistrement des icones qui prend une place énorme.
Je voudrais donc remplacer toute les occurences de ce qu'il a y entre ICON=" et " par rien.

ICON="data:image/png;base64,xjhdjdjdjgh........rtyrty"

J'ai regardé aussi KfileReplace mais mon cerveau atteint ses limites pour décoder ça.
J'ai cherché, mais ne comprend rien aux tentatives d'explications.

Une idée ?

Merci.

#18 Le 07/08/2008, à 00:20

koralis

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Comme je vois que " semble poser avec sed, j'ai essayé:

sed -i "s/\ICON=\[A-Za-z0-9]\>//g" bookmarks.html

pour remplacer tout de qu'il y a entre ICON= et > dans

ICON="data:image/png;base64,xjhdjdjdjgh........rtyrty">

No success.

#19 Le 07/08/2008, à 15:54

kiros

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Bon, alors j'ai trouvé une solution, mais pas avec SED (je n'y comprends RIEN).

Beaucoup plus simple: Kate avec kregexpeditor installé.

Purger tous les icones de bookmark.html de Firefox passe le fichier de 4.9Mo à .... 805ko ...

Impressionant !

Merci pour tout.

#20 Le 07/08/2008, à 22:38

Link Mauve

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Une regex toute simple peut aussi faire l'affaire :

sed 's/ICON=".*"//'

(Au passage kiros, pense à passer à Firefox 3 un de ces jours wink)

Dernière modification par Link Mauve (Le 07/08/2008, à 22:39)

Hors ligne

#21 Le 08/08/2008, à 10:41

kiros

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Link Mauve a écrit :

Une regex toute simple peut aussi faire l'affaire : sed 's/ICON=".*"//'

Trop "simple" car ne marche pas. As-tu vraiment testé ?
Kate avec kregexpeditor est très efficace.

"pense à passer à Firefox 3 un de ces jours"

Pourquoi ? Je n'ai pas de soucis avec Firefox2 qui ne m'a rien apporté par rapport à Firefox 1.5 que j'ai toujours sur une partition, les bookmarks étant compatibles (je configure Firefox 2 comme 1.5).
Je ne change qui si une nouvelle version m'apporte quelque-chose qui m'intéresse, ce qui n'est pas le cas de Firefox 3 (loader intégré toujours aussi minable comparé à Opera par exemple, et d'autres choses mais ce n'est pas du tout le sujet !).

#22 Le 08/08/2008, à 11:24

Totor

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

kiros, j'ai essayé ce ci et c'est ok :

sed -i 's/ICON="[^"]*"/ICON=""/g' bookmarks.html

-- Lucid Lynx --

Hors ligne

#23 Le 08/08/2008, à 14:00

kiros

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

Effectivement, ça marche (sauf 1 icone, pas trouvé pourquoi), bien que je ne comprenne absolument pas la logique syntaxique de SED, si logique il y a.

Pas aussi convivial que Kate, et à ne pas utiliser sans quelques tests préliminaires.....

On peut se demander si celui qui a pondu sed avait un cerveau normalement câblé.

#24 Le 08/08/2008, à 14:58

Totor

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

peux-tu donner la ligne contenant l'icône avec laquelle cela n'a pas fonctionné ?


-- Lucid Lynx --

Hors ligne

#25 Le 08/08/2008, à 15:20

kiros

Re : un 'chercher/remplacer' un peu spécial : KFileReplace ou Commande ?

        <DT><A HREF="file:///media/hda5/Applis/Mozilla/FFProfile/search.html" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAL%2BSURBVHjaXZP%2FSxNhHMffd7d18%2BY2Z%2Bpyjqbp%2BiKB2syIFSkaaeAfkEEQFBP6oUB%2FiH7JLxEU%2FRqkIJkEFvZLBIVfUJbKII3MQg3xC86mrvbt1LndubueXTrUF7w5Hu4%2B78%2F7eZ7PUbIs4yBNTU201Wp1GI3GKpZlc0Kh0AjP85%2BcTucaDkIM9qmnp6fR7%2FdviqIob2xsyKRQUSQSkcfGxr62tbVZ9n6fTNDe3q4uLi4esdvtZeFwGJNLQUx6IuCjcRw1MLBbORw2aBGPxyMul8tZV1f3GgQaO%2BTm5r4sKSkpm%2FOsoeXDEkZXOdCGLOj0aQjQ6Xja78PH7z6QZJzD4WgjDS1Jg66urqry8vJr%2FkAQj%2Fr%2BgM3IgbQZxA27AXev5KLadghGfSoG5%2BMYnOET0bnCwsL3SQPSvVEQBLrD7Yegy8a8X8RUUIWWd1N40vMNJ62ZMHMivCERHS4vYtsU8vPzz5DzMKlAMJlMp7a2tuD2iFijtxGLChBigDuqxj07FIZn1zGzIiEu0hib5%2BGwpYLjuBolgcViySZ7wwLPILQlYT0mYVOQQCOOW5eP41XfTwwtyQhuivBvCOSAeSTQarUXFANyTZHEbaQyIvZSaYkjlWPxYsSPvWQaNKAoCrFY7Ldi4PV6FxiGQX46g13Ie7g8QMVjN2bXVcpaQZZQVpAGSZISjQcUg5WVlWGNRoPbZ7VgxAhIU%2BRlMWi4mIKhB%2BdxtZDFsWwWrJpGzQkWNlMKIgTSeHQ3QYPP51sryFDDWSQrJhQlwz0XxpuBH%2FCubyNBgU7As%2BunQW4M4%2BPjD5ubm6XkJHZ2dlbU1tb2k1jMUhh4%2Fvkvfq3%2Bn8QcnYxLtjTcqTRDJMXT09Nfqqurz4Gwa5A0KS0t7TYYDCYyslCpVKBpWpn5xDoajUoTExPdgUDgZn19vbjPgJxqCoAjOp0uu7W19X5eXl6R2WzO1Ov1hxYXF3mPx7Pc29v7lvxs%2FQCWiVZJrbQvAUUAoCZid6QhoogEopjyJCI129jhH7fEiEQc%2BApkAAAAAElFTkSuQmCC" LAST_CHARSET="ISO-8859-1" ID="rdf:#$H.JZw2">Search</A>