Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Petit soucis en bash : remplacer une ligne dans un fichier de config
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
Petit soucis en bash : remplacer une ligne dans un fichier de config
nochka85 Français 10 Guest [Read]
12 June 2018 à 05:02

nochka85, Saturday 05 July 2008 à 19:07 | Quote


Subscription date : 29 November 2007
Messages : 7408
J'ai un petit soucis en bash (euh... oui, encore !!! ) pour mon script theme_creator :

J'ai le fichier de config du thème courant dans lequel je souhaiterais remplacer une ligne (ou une partie de la ligne) directement depuis mon script...

J'arrive sans problème à trouver et extraire ma ligne avec :

cat $CURRENT_THEME$CONFIGURATION_FILE | grep "default icon directory="


... où $CURRENT_THEME$CONFIGURATION_FILE = Mon fichier de config

et donc, cette commande me renvoit ceci :

default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme1


Bref, je voudrais que mon script puisse écrire dans le fichier et remplacer /home/mon_user/.cairo-dock/icons_themes/mon_theme1 par (par exemple) /home/mon_user/.cairo-dock/icons_themes/mon_theme2

.... et là, je coince complètement

Mav, Saturday 05 July 2008 à 19:30 | Quote


Subscription date : 29 November 2007
Messages : 3146
sed te rendra beaucoup de service
Un peu dur à maitriser mais tellement propre !

Tofe, Saturday 05 July 2008 à 19:36 | Quote


Subscription date : 09 February 2008
Messages : 921
Tu peux tenter de faire appel à perl:

pour remplacer "default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme1" par "default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme2" dans le fichier "$CURRENT_THEME$CONFIGURATION_FILE", ça donne:

perl -i -p -e 's|default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme1|default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme2|g' "$CURRENT_THEME$CONFIGURATION_FILE"

Et voilà !

fabounet, Sunday 06 July 2008 à 04:51 | Quote


Subscription date : 30 November 2007
Messages : 17118
Un peu dur à maitriser mais tellement crade !
non je plaisante, les 2 sont affreux à lire

nochka85, Sunday 06 July 2008 à 11:15 | Quote


Subscription date : 29 November 2007
Messages : 7408
perl -i -p -e 's|default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme1|default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme2|g' "$CURRENT_THEME$CONFIGURATION_FILE"


Merci Tofe ! Cela marche impeccable !

Par contre, le texte à remplacer (default icon directory=/home/mon_user/.cairo-dock/icons_themes/mon_theme1) je l'obtiens avec : cat $CURRENT_THEME$CONFIGURATION_FILE | grep "default icon directory="

... comment je pourrais "inclure" le résultat dans la commande perl ?

Voilà le type de truc que je voudrais faire :

perl -i -p -e 's| résultat de : cat $CURRENT_THEME$CONFIGURATION_FILE | grep "default icon directory=" |default icon directory=$NOUVELLE_ADRESSE|g' "$CURRENT_THEME$CONFIGURATION_FILE"



Sinon, j'ai aussi regarder du coté de sed : ...... bah j'ai RIEN compris

Tofe, Sunday 06 July 2008 à 12:11 | Quote


Subscription date : 09 February 2008
Messages : 921
alors, mmh, je pense que tu n'as pas besoin de grep, ici. perl fait déjà le boulot de rechercher ton texte dans le fichier, donc pas besoin de le faire deux fois

Simplement, ton souci, finalement, c'est que tu ne sais pas ce qu'il y aura après "default icon directory=", mais tu voudrais le remplacer tout de même.
Là, après sed et perl, voici venu le troisième monstre: les expressions régulières

perl -i -p -e 's|default icon directory=.*|default icon directory=$NOUVELLE_ADRESSE|g' "$CURRENT_THEME$CONFIGURATION_FILE"

le ".*" se lit comme ça:
- le point représente n'importe quel caractère
- l'étoile dit que l'entité précédente (ici le point) peut être rencontré plusieurs fois de suite (y compris zéro fois).
Finalement, donc, ".*" désigne n'importe quel texte, de n'importe quelle longueur, jusqu'à la fin de la ligne.

PS: le "g" à la fin veut dire que perl va remplacer toutes les occurences de "default icon directory=.*" dans le fichier texte. Si tu ne mets pas "g", il va seulement remplacer la première trouvée, je ne sais pas si c'est ce que tu veux. De toutes façons, normalement, ta clé est unique

nochka85, Sunday 06 July 2008 à 12:55 | Quote


Subscription date : 29 November 2007
Messages : 7408
Cool

euh, une "dernière" question de débutant
Si j'avais voulu garder la commande cat $CURRENT_THEME$CONFIGURATION_FILE | grep "$CONFIGURATION_LINE" , comment j'aurais pu l'affecter à une variable nommée (par exemple) $STRING ???
Exemple :
cat $CURRENT_THEME$CONFIGURATION_FILE | grep "$CONFIGURATION_LINE" me renvoit : default icon directory=/mon_répertoire
et je veux obtenir :
STRING="default icon directory=/mon_répertoire"

Je pensais que cat $CURRENT_THEME$CONFIGURATION_FILE | grep "$CONFIGURATION_LINE" > $STRING pouvait marcher, mais .... non

nochka85, Sunday 06 July 2008 à 13:00 | Quote


Subscription date : 29 November 2007
Messages : 7408
mmmm...

perl -i -p -e 's|default icon directory=.*|default icon directory=$NOUVELLE_ADRESSE|g' "$CURRENT_THEME$CONFIGURATION_FILE"


avec NOUVELLE_ADRESSE="mon_nouveau_répertoire" ... me remplace bien la ligne, mais par :

default icon directory=


.... au lieu de : default icon directory=mon_nouveau_répertoire

EDIT :

J'ai trouvé, il faut mettre l'argument entre '' ->

perl -i -p -e 's|default icon directory=.*|default icon directory='$NOUVELLE_ADRESSE'|g' "$CURRENT_THEME$CONFIGURATION_FILE"

Tofe, Sunday 06 July 2008 à 13:55 | Quote


Subscription date : 09 February 2008
Messages : 921
bien, je vois que tu as corrigé de toi-même

Pour ta question, tu as les "back-quotes", qui est le caractère "`". Cela te permet de récupérer la sortie d'une commande en tant que texte. Ainsi, si tu mets:

STRING=`cat $CURRENT_THEME$CONFIGURATION_FILE | grep "$CONFIGURATION_LINE"`


Cela te donnera ce que tu veux

Bon courage pour la suite, et n'hésite pas à poser des questions si tu es bloqué

nochka85, Sunday 06 July 2008 à 14:06 | Quote


Subscription date : 29 November 2007
Messages : 7408
Merci !!! C'est exactement ce que je cherchais !!


Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
Petit soucis en bash : remplacer une ligne dans un fichier de config
nochka85 Français 10 Guest [Read]
12 June 2018 à 05:02

Post a message

Anti-spam filter 1 (*) times (*) 3 =
            
Did you know ? The RSS tag can display the last 5 articles of a feed : [rss]http://...[/rss]


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Petit soucis en bash : remplacer une ligne dans un fichier de config Top

Online users : jayamahe,

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.