#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
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
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
Un p'tit tour dans le manuel s'impose
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
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
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 ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors 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
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors 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
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 ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 18/05/2010, à 06:56
- Totor
Re : [En cours... ] Ecrire dans un fichier a un endroit precis en console
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.
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
Dernière modification par Hizoka (Le 18/05/2010, à 09:10)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne