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". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 16/05/2010, à 10: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, à 21:59)


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

Hors ligne

#2 Le 16/05/2010, à 11: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, à 11: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, à 18: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 ?

En ligne

#5 Le 16/05/2010, à 20: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, à 07: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, à 08:52

Hizoka

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

merci smile

En ligne

#8 Le 17/05/2010, à 20: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, à 20:09)


-- Lucid Lynx --

Hors ligne

#9 Le 17/05/2010, à 21: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 ?

En ligne

#10 Le 18/05/2010, à 06: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, à 09: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, à 09:10)

En ligne

Haut de page ↑