Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 16/05/2010, à 11:13

T_i_t_i

[En cours... ] Ecrire dans un fichier a un endroit precis en console

Bonjour à tous smile

J'ai une question concernant la console :

J'aimerais en console pouvoir écrire dans un fichier à un endroit précis.
Mon fichier ressemble à ça :

ATTRIBUT1=VALEUR1
ATTRIBUT2=VALEUR2
ATTRIBUT3=VALEUR3
          ...

Comment faire, à partir de la console, pour changer uniquement la ligne ATTRIBUT2=VALEUR2, pour par exemple la remplacer par ATTRIBUT2=VALEURX ?
J'aimerais réutiliser ensuite VALEURX dans un fichier bash comme variable.
D'ailleurs, comment faire pour afficher uniquement VALEURX et pas la ligne entière ni le fichier entier ?

D'avance merci pour vos réponses smile

Dernière modification par T_i_t_i (Le 17/05/2010, à 22:59)


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne

#2 Le 16/05/2010, à 12:21

credenhill

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

hello

$ cat fichier
ATTRIBUT1=VALEUR1
ATTRIBUT2=VALEUR2
ATTRIBUT3=VALEUR3
$ 
$ sed -i '/^ATTRIBUT2/s/VALEUR2/VALEURX/' fichier
$ 
$ cat fichier
ATTRIBUT1=VALEUR1
ATTRIBUT2=VALEURX
ATTRIBUT3=VALEUR3
$ 
$ awk -F"=" '/^ATTRIBUT2/ {print $2}' fichier
VALEURX
$

Hors ligne

#3 Le 16/05/2010, à 12:29

T_i_t_i

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

merci beaucoup, je ne connaissait pas les instructions sed et awk smile
Un p'tit tour dans le manuel s'impose smile


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne

#4 Le 16/05/2010, à 19:21

Hizoka

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

c'est exactement ce que je viens de faire dna sun script que je modifie smile

pour récupéré les variables :

Soit 2 fichiers :
- fichier script
- fichier contenant les variables

Dans le fichier script, lire le fichier variables :

source fichier_variable

de cette façon toutes les variables sont utilisables dans ton script smile

mais la solution de sed est pas ultra top quand les variables contiennent des /, des sauts de lignes...

je cherchais un moyen d'utiliser echo en lui indiquant la ligne mais pas trouvé comment faire.

je vais tester awk.

une question avec awk, soit :

window_icon="hf"
text="ghfdgfd
ghdf
kkk"
timeout="10"

comment lui dire de comprendre qu'il faut qu'il remplace :

"ghfdgfd
ghdf
kkk"

par autre chose ?

Hors ligne

#5 Le 16/05/2010, à 21:35

T_i_t_i

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

Mmmhhhhh... sur awk dis tu ?
Je ne me suis pas encore trop penché sur ça...


Ubuntu 10.04 / GNOME
(wmii),c'est bien, (uzbl),aussi (merci helly ^^)

Hors ligne

#6 Le 17/05/2010, à 08:56

credenhill

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

$ cat a1
window_icon="hf"
text="ghfdgfd
ghdf
kkk"
timeout="10"
$ 
$ awk 'BEGIN{RS=ORS="\"\n";FS=OFS="="} ; /text/ {$2="\"bibi\nbaba\nbobo"} ; {print}' a1
window_icon="hf"
text="bibi
baba
bobo"
timeout="10"
$

Hors ligne

#7 Le 17/05/2010, à 09:52

Hizoka

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

merci smile

Hors ligne

#8 Le 17/05/2010, à 21:08

Totor

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

Bonsoir,
@Hizoka :
La solution de credenhill présente 2 bugs qui correspondent à des cas particuliers et probablement mineurs. A toi de voire si tu restes avec sa solution ou non.

Voici un exemple du premier bug :

$cat a1
window_icon="hf"
text="
ghfdgfd
ghdf
kkk"
timeout="10"

Si tu appliques son script, tu obtiendras ceci :

$awk 'BEGIN{RS=ORS="\"\n";FS=OFS="="} ; /text/ {$2="\"bibi\nbaba\nbobo"} ; {print}' a1
window_icon="hf"
text="bibi
baba
bobo"
ghfdgfd
ghdf
kkk"
timeout="10"

2nd bug :

$cat a1
window_icon="hf"
text="ghfdgfd=1
ghdf
kkk"
timeout="10"

Résultat :

$awk 'BEGIN{RS=ORS="\"\n";FS=OFS="="} ; /text/ {$2="\"bibi\nbaba\nbobo"} ; {print}' a1                                                                                 
window_icon="hf"
text="bibi
baba
bobo=1
ghdf
kkk"
timeout="10"

A toi donc de juger l'utilité ma proposition :

awk 'BEGIN{
        RS="\""
        FS="="
        OFS="=\""}
{
        if (NF > 1) {
                ORS=RS
                variable=$1
                getline
                value=$0
                if (variable ~ /text/)  value="bibi\nbaba\nbobo"
                NR=2
                $1=variable
                $2=value
                print
        } else {
                ORS=""
                print
        }
}' a1

A noter que dans les 2 cas, ceci ne peut être géré :

window_icon="\"abcdef\""
text="
ghfdgfd=1
ghdf
kkk"
timeout="10"

Dernière modification par Totor (Le 17/05/2010, à 21:09)


-- Lucid Lynx --

Hors ligne

#9 Le 17/05/2010, à 22:16

Hizoka

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

ok, donc il faut juste empecher tout signe egal ?

ok merci smile

en fait ça ne serait pas plus facile que d'effacer tout ce qui se trouve entre  les lignes "window_icon" et "timeout" puis de dire avec sed par exemple envoie ton texte apres "window_icon" ?

ou bien encore (mais ça va faire crade ça : balancer a la fin une 2eme variable text, ainsi la 1ere devient caduc non ?

Hors ligne

#10 Le 18/05/2010, à 07:56

Totor

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

Hizoka a écrit :

ok, donc il faut juste empecher tout signe egal ?

Pas seulement. le 1er cas correspond à un retour à la ligne après la 1ère guillement encadrant la valeur.

Hizoka a écrit :

en fait ça ne serait pas plus facile que d'effacer tout ce qui se trouve entre  les lignes "window_icon" et "timeout" puis de dire avec sed par exemple envoie ton texte apres "window_icon" ?

C'est trop spécifique car je suppose que tu peux changer window_icon ou timeout également ?


-- Lucid Lynx --

Hors ligne

#11 Le 18/05/2010, à 10:10

Hizoka

Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console

bah je peux faire en sorte que la variable "text" soit toujours entre les variables "window_icon" et "timeout".

En fait à un moment, je cherchais comment changer ces "retours" en "\n" mais ca n'a rien donné de terrible (avec tr ou sed, pas franchement top)

desolé de pourrir ton topic T_i_t_i wink

Dernière modification par Hizoka (Le 18/05/2010, à 10:10)

Hors ligne

Haut de page ↑