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 05/04/2020, à 18:16

lynn

[Résolu] sed : remplacement de texte et variables

Bonjour,

Je cherche à modifier un bloc de texte d'un fichier (gdm3.css) en utilisant sed.

La partie de texte :

#lockDialogGroup {
  background-color: #41494c; }

 
que je cherche à remplacer par :

#lockDialogGroup {
  background: #41494c url(file:///usr/share/gnome-shell/theme/noise-texture.png);
  background-size: 1920 px 1080 px;
  background-repeat: none; }

 
 
J'ai inclus ces parties de texte dans des variables

original_part='#lockDialogGroup {\n
  background-color: #41494c; }'
modify_part='#lockDialogGroup {\n
  background: #41494c url(file:///usr/share/gnome-shell/theme/noise-texture.png);\n
  background-size: 1920 px 1080 px;\n
  background-repeat: none; }'

et tenté la commande suivante mais sans succès ; le fichier n'est pas modifié.

sed 's/"${original_part}"/"${modify_part}"/g' gdm3.css

Serait-ce l'utilisation des variables qui posent problème ? Autre ?

Merci pour vos suggestions.

Dernière modification par lynn (Le 05/04/2020, à 21:21)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 05/04/2020, à 18:37

kamaris

Re : [Résolu] sed : remplacement de texte et variables

Si tu veux le faire avec des variables, tu peux le faire comme ça :

original_part='#lockDialogGroup {\n  background-color: #41494c; }'
modify_part='#lockDialogGroup {\n  background: #41494c url(file:///usr/share/gnome-shell/theme/noise-texture.png);\n  background-size: 1920 px 1080 px;\n  background-repeat: none; }'
sed -z "s%$original_part%$modify_part%" gdm3.css

PS : si tu veux remplacer plusieurs occurrences, comme ça semble être le cas dans ton post, il faut évidemment rajouter le « g » :

sed -z "s%$original_part%$modify_part%g" gdm3.css

Dernière modification par kamaris (Le 05/04/2020, à 18:52)

Hors ligne

#3 Le 05/04/2020, à 19:40

lynn

Re : [Résolu] sed : remplacement de texte et variables

Merci kamaris. smile

Je n'avais pas capté l'utilité de l'option -z. Pour le g, il n'y a qu'une occurrence, donc ce n'est pas nécessaire.

Par contre, je veux bien une explication (pas trop technique hein, juste histoire de me coucher moins bête ce soir... tongue) sur le fait d'utiliser le caractère % plutôt que / dans la commande ; il n'y a rien dans le man de sed à ce sujet...


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 05/04/2020, à 20:25

marcus68

Re : [Résolu] sed : remplacement de texte et variables

Bonjour,

pour l'explication,

si tu écris :

's/"${original_part}"/"${modify_part}"/g'

ton texte est protégé par les ' et donc tes variables ne seront pas interprétés par bash. Sed va chercher littéralement "${original_part}" dans ton fichier, ce qu'il ne va pas trouver.

Ensuite ton texte comprend des / donc tu ne pas utiliser ce caractère comme séparateur de Sed. Sed va croire que la commande s’arrête quand il va rencontrer un autre /. $ convient car il n'est pas présent dans ton texte.

Hors ligne

#5 Le 05/04/2020, à 20:41

kamaris

Re : [Résolu] sed : remplacement de texte et variables

Oui voilà, c'est ça, sauf que ça n'est pas « $ », mais « % » (faute de frappe de marcus68 je suppose), ou autre chose : le caractère est à peu près arbitraire.
Le manuel de sed est misérable, c'est à peine un aide-mémoire.
Il faut vraiment s'appuyer sur autre chose :
- le manuel de gnu sed en ligne : https://www.gnu.org/software/sed/manual/sed.html
- ce tuto qui est bien aussi, souvent cité ici ou là sur le net : https://www.grymoire.com/Unix/Sed.html

Hors ligne

#6 Le 05/04/2020, à 20:49

Watael

Re : [Résolu] sed : remplacement de texte et variables

pour plus de détail sur sed que le man, voyez info sed


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#7 Le 05/04/2020, à 21:05

kamaris

Re : [Résolu] sed : remplacement de texte et variables

Oui, en local on a aussi info sed.
Ça correspond au manuel sur gnu.org (à quelques versions près éventuellement), mais le confort de lecture est pas le même (je trouve).
Perso j'ai un petit script qui me télécharge ce genre de pages, et / ou qui me fait des conversions, pour pouvoir travailler en local avec des manuels au format html.

Hors ligne

#8 Le 05/04/2020, à 21:20

lynn

Re : [Résolu] sed : remplacement de texte et variables

ok. Merci pour vos retours.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#9 Le 05/04/2020, à 22:03

Watael

Re : [Résolu] sed : remplacement de texte et variables

on peut faire info2man, puis man2html ?

il y a eu dans les dépôts un info2html, il me semble...
mais je ne le retrouve pas. sad


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#10 Le 05/04/2020, à 22:33

marcus68

Re : [Résolu] sed : remplacement de texte et variables

Oui faute de frappe. Même si ça pourrait marcher avec $, ça paraît plus compliqué à utiliser dans ce cas.

Hors ligne

#11 Le 05/04/2020, à 23:05

kamaris

Re : [Résolu] sed : remplacement de texte et variables

J'avais essayé info2man et / ou info2html*, sans pouvoir en tirer quelque chose de correct, aussi bien sous ubuntu que sous arch linux.
Et comme info est un format utilisé essentiellement (uniquement ?) par gnu, et que les manuels gnu en ligne sont très bien, je me contente de les récupérer.

man2html par contre marche bien, en tout cas sous ubuntu : le paquet sous arch linux n'est pas du tout équivalent (en tout cas pas quand j'avais essayé, il y a plusieurs mois de ça).
Du coup, sous arch, je pars d'une conversion roff2html que j'améliore ensuite (mise en forme, ajouts de liens internes et externes), pour retrouver plus ou moins le man2html de ubuntu (mais sans serveur web).

--
* Ça devait être info2www, plutôt que info2html : https://packages.ubuntu.com/eoan/info2www

Dernière modification par kamaris (Le 05/04/2020, à 23:13)

Hors ligne