Script pour écrire dans un fichier texte
Résolu/Fermé
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
-
1 déc. 2008 à 13:40
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010 - 3 déc. 2008 à 17:25
flipmode62 Messages postés 49 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 20 mai 2010 - 3 déc. 2008 à 17:25
A voir également:
- Pour créer un fichier texte je peux
- Fichier rar - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer un groupe whatsapp - Guide
- Fichier host - Guide
21 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
2 déc. 2008 à 17:53
2 déc. 2008 à 17:53
Re-
PS. lami20j => Son truc est un peu tordu, il y a quelques paramètres à prendre en compte (saut de ligne dans la variable, les valeurs suivants "text=" ne sont pas connues à l'avance, etc.) ;-(
[tmpfs]$ var1=YYYYY [tmpfs]$ var2=XXXXX [tmpfs]$ cat fichier define host { host_name=localhost x=180 y=180 recognize_services=1 label_show=1 text=AAAA } define host { host_name=localhost1 x=280 y=580 recognize_services=1 label_show=1 text=BBBB } [tmpfs]$ sed "/localhost/,/}/{ /^text/{s/=.*/=$(echo $var1)/} } /localhost1/,/}/{ /^text/{s/=.*/=$(echo $var2)/} } " fichier define host { host_name=localhost x=180 y=180 recognize_services=1 label_show=1 text=YYYYY } define host { host_name=localhost1 x=280 y=580 recognize_services=1 label_show=1 text=XXXXX } [tmpfs]$;-))
PS. lami20j => Son truc est un peu tordu, il y a quelques paramètres à prendre en compte (saut de ligne dans la variable, les valeurs suivants "text=" ne sont pas connues à l'avance, etc.) ;-(
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 13:50
1 déc. 2008 à 13:50
Salut,
jp@MDK:~ ssh$ var="AAAAA" jp@MDK:~ ssh$ echo $var AAAAA jp@MDK:~ ssh$ cat fichier.txt .......................................... .......................................... define text { text=xxxxx test1="ceci est un test" test2="ceci est un test" test3="ceci est un test" } jp@MDK:~ ssh$ sed "/^text/{s/=.*/=$var/}" fichier.txt .......................................... .......................................... define text { text=AAAAA test1="ceci est un test" test2="ceci est un test" test3="ceci est un test" } jp@MDK:~ ssh$Pour que le résultat soit permanent il suffit d'ajouter l'option "-i" (-i.bak pour faire une sauvegarde du fichier original) :
jp@MDK:~ ssh$ sed -i.bak "/^text/{s/=.*/=$var/}" fichier.txt jp@MDK:~ ssh$ cat fichier.txt .......................................... .......................................... define text { text=AAAAA test1="ceci est un test" test2="ceci est un test" test3="ceci est un test" } jp@MDK:~ ssh$;-))
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 13:55
1 déc. 2008 à 13:55
Merci pour la rapidité de ta réponse
J'ai un probléme lorsques je fais:
sed "/^text/{s/=.*/=$var/}" fichier.txt
sed: -e expression #1, char 54: unterminated `s' command
Merci pour ton aide
Flipmode
J'ai un probléme lorsques je fais:
sed "/^text/{s/=.*/=$var/}" fichier.txt
sed: -e expression #1, char 54: unterminated `s' command
Merci pour ton aide
Flipmode
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 13:57
1 déc. 2008 à 13:57
Elle contient quoi ta variable $var ??? Des slashs ?
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 14:03
1 déc. 2008 à 14:03
Ma variable var contient :
32 Test. 45 Test structur??
Pouvez vous m'expliquer les différentes options de la commande :
sed "/^text/{s/=.*/=$var/}" fichier.txt
La commande: sed "/^text/{s/=.*/=$var/}" fichier.txt , vous l'utilisez dans un script ou vous l'a tappez directement dans un terminal?
Merci
Flipmode
32 Test. 45 Test structur??
Pouvez vous m'expliquer les différentes options de la commande :
sed "/^text/{s/=.*/=$var/}" fichier.txt
La commande: sed "/^text/{s/=.*/=$var/}" fichier.txt , vous l'utilisez dans un script ou vous l'a tappez directement dans un terminal?
Merci
Flipmode
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 14:07
1 déc. 2008 à 14:07
Bizarre ;-\
jp@MDK:~ ssh$ cat fichier.txt .......................................... .......................................... define text { text=AAAAA test1="ceci est un test" test2="ceci est un test" test3="ceci est un test" } jp@MDK:~ ssh$ echo $var 32 Test. 45 Test structur?? jp@MDK:~ ssh$ sed "/^text/{s/=.*/=$var/}" fichier.txt .......................................... .......................................... define text { text=32 Test. 45 Test structur?? test1="ceci est un test" test2="ceci est un test" test3="ceci est un test" } jp@MDK:~ ssh$;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 14:14
1 déc. 2008 à 14:14
J'ai toujours la meme erreur: sed: -e expression #1, char 53: unterminated `s' command
Pourtant sed est intallé, j'ai fait un yum install sed
Pouvez vous m'expliquer les différentes options de la commande :
sed "/^text/{s/=.*/=$var/}" fichier.txt
Est ce que vous utilisez la commande sed "/^text/{s/=.*/=$var/}" fichier.txt dans un script ou est ce que vous l'a tappez directement dans un terminal?
Merci
Pourtant sed est intallé, j'ai fait un yum install sed
Pouvez vous m'expliquer les différentes options de la commande :
sed "/^text/{s/=.*/=$var/}" fichier.txt
Est ce que vous utilisez la commande sed "/^text/{s/=.*/=$var/}" fichier.txt dans un script ou est ce que vous l'a tappez directement dans un terminal?
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 14:24
1 déc. 2008 à 14:24
/^text/{
On recherche une ligne commençant (^) par "text", et quand on la trouve on applique alors les instructions contenues entre les accolades
s/=.*/=$var/
On substitue le signe égal et tout ce qui se trouve après, par le signe égal suivi du contenu de la variable "$var"
Pour mon test j'ai lancé la commande depuis un terminal en déclarant ma variable auparavant. Mais il ne devrait pas y avoir de soucis depuis un script, à partir du moment où la variable elle même est déclarée dans ce même script...
On recherche une ligne commençant (^) par "text", et quand on la trouve on applique alors les instructions contenues entre les accolades
s/=.*/=$var/
On substitue le signe égal et tout ce qui se trouve après, par le signe égal suivi du contenu de la variable "$var"
Pour mon test j'ai lancé la commande depuis un terminal en déclarant ma variable auparavant. Mais il ne devrait pas y avoir de soucis depuis un script, à partir du moment où la variable elle même est déclarée dans ce même script...
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 14:30
1 déc. 2008 à 14:30
J'ai effectivement un probléme!! Si j'affecte test à la variable var (var=test) et que je fais: sed "/^text/{s/=.*/=$var/}" fichier.txt
J'obtiens:
..........................................
define text {
text=test
test1="ceci est un test"
test2="ceci est un test"
test3="ceci est un test"
}
Donc ça marche!!
En revanche, si je fais: var=32 Test. 45 Test structur , alors ça ne marche pas!!
Quand je fais: sed "/^text/{s/=.*/=$var/}" fichier.txt
J'obtiens sed: -e expression #1, char 53: unterminated `s' command
Il n'aime pas les espaces!! Et a chaque fois, il y a des espaces dans le résultats de ma requete SQL donc voila pourquoi ça ne marche pas :(
Je ne sais pas comment résoudre ce probléme :(
J'obtiens:
..........................................
define text {
text=test
test1="ceci est un test"
test2="ceci est un test"
test3="ceci est un test"
}
Donc ça marche!!
En revanche, si je fais: var=32 Test. 45 Test structur , alors ça ne marche pas!!
Quand je fais: sed "/^text/{s/=.*/=$var/}" fichier.txt
J'obtiens sed: -e expression #1, char 53: unterminated `s' command
Il n'aime pas les espaces!! Et a chaque fois, il y a des espaces dans le résultats de ma requete SQL donc voila pourquoi ça ne marche pas :(
Je ne sais pas comment résoudre ce probléme :(
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 14:33
1 déc. 2008 à 14:33
si je fais: var="32 Test. 45 Test structur" ça marche!!
Il faut juste que je rajoute des " au début et à la fin du résultat de ma requete SQL qui se trouve dans mon fichier requete.lst
Comment je peux faire ça?
Il faut juste que je rajoute des " au début et à la fin du résultat de ma requete SQL qui se trouve dans mon fichier requete.lst
Comment je peux faire ça?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 14:45
1 déc. 2008 à 14:45
var="\"$(cat requete.lst)\""
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 14:36
1 déc. 2008 à 14:36
Alors essaie comme ça en copier/collant la syntaxe suivante à la place de l'autre avec une variable => var=""32 Test. 45 Test structur??" :
sed '/^text/{s/=.*/='"$var"'/}'La nuance est infime, c'est au niveau des quotes simples et doubles.
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 14:40
1 déc. 2008 à 14:40
Merci pour ton aide mais le sed '/^text/{s/=.*/='"$var"'/}' ne fonctionne pas :(
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 15:00
1 déc. 2008 à 15:00
C'est bizarre!
vi requete.lst
6990 Doc non struct
4905 Doc structur
var="\"$(cat requete.lst)"\"
echo $var
"6990 Doc non struct 4905 Doc structur"</gras>
sed "/^text/{s/=.*/=$var/}" fichier.txt
sed: -e expression #1, char 35: unterminated `s' command
Ca ne marche pas :(
Alors que si je fais comme ci dessous ça marche :(
var="6990 Doc non struct 4905 Doc structur"
sed "/^text/{s/=.*/=$var/}" fichier.txt
..........................................
..........................................
define text {
text=6990 Doc non struct 4905 Doc structur
test1="ceci est un test"
test2="ceci est un test"
test3="ceci est un test"
}
Je ne comprends pas pourquoi
Merci d'avance pour votre aide$
Flipmode
vi requete.lst
6990 Doc non struct
4905 Doc structur
var="\"$(cat requete.lst)"\"
echo $var
"6990 Doc non struct 4905 Doc structur"</gras>
sed "/^text/{s/=.*/=$var/}" fichier.txt
sed: -e expression #1, char 35: unterminated `s' command
Ca ne marche pas :(
Alors que si je fais comme ci dessous ça marche :(
var="6990 Doc non struct 4905 Doc structur"
sed "/^text/{s/=.*/=$var/}" fichier.txt
..........................................
..........................................
define text {
text=6990 Doc non struct 4905 Doc structur
test1="ceci est un test"
test2="ceci est un test"
test3="ceci est un test"
}
Je ne comprends pas pourquoi
Merci d'avance pour votre aide$
Flipmode
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
1 déc. 2008 à 17:38
1 déc. 2008 à 17:38
C'est le saut de ligne qui fiche le bronx et l'interprétation de la variable avec des quotes doubles autour ;-(
[tmpfs]$ echo $var "Bonjour salut" [tmpfs]$ echo "$var" "Bonjour salut" [tmpfs]$Donc essaie comme ça :
sed "/^text/{s/=.*/=$(echo $var)/}";-))
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
1 déc. 2008 à 16:46
1 déc. 2008 à 16:46
En bidouillant un peu ça marche, maintenant j'aimerai à partir des commandes précédentes réaliser un script pour qu'il s'éxécute toutes les 10 minutes.
Mon script a la forme suivante:
#!/bin/bash
var="\"$(cat requete.lst)"\"
echo $var>requete.lst
var=$(cat requete.lst)
sed -i.bak "/^text=/{s/=.*/=$var/}" fichier.txt
Qu'en pensez vous?
Merci
Flipmode
Mon script a la forme suivante:
#!/bin/bash
var="\"$(cat requete.lst)"\"
echo $var>requete.lst
var=$(cat requete.lst)
sed -i.bak "/^text=/{s/=.*/=$var/}" fichier.txt
Qu'en pensez vous?
Merci
Flipmode
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
2 déc. 2008 à 14:22
2 déc. 2008 à 14:22
Ca marche :)
Problème résolu :)
Merci beaucoup pour ton aide
Problème résolu :)
Merci beaucoup pour ton aide
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
2 déc. 2008 à 16:52
2 déc. 2008 à 16:52
Rebonjour,
J'ai une dernière question. J'ai un fichier texte, qui est de la forme:
define host {
host_name=localhost
x=180
y=180
recognize_services=1
label_show=1
text=AAAA
}
define host {
host_name=localhost1
x=280
y=580
recognize_services=1
label_show=1
text=BBBB
}
J'aimerai remplacer AAAA par $var1 et BBBB par $var2
Si j'utilise la commande: sed "/^text/{s/=.*/=$(echo $var1)/}"
Il change AAAA et BBBB par $var1
J'ai essayé de faire:
sed -i.bak "/^localhost/{s/text.*/text $(echo $var1)/}" /usr/local/nagios/share/nagvis/nagvis/etc/maps/demo.cfg
sed -i.bak "/^localhost1/{s/text.*/text $(echo $var2)/}" /usr/local/nagios/share/nagvis/nagvis/etc/maps/demo.cfg
Mais ça ne marche pas :(
Merci pour votre aide
Flipmode
J'ai une dernière question. J'ai un fichier texte, qui est de la forme:
define host {
host_name=localhost
x=180
y=180
recognize_services=1
label_show=1
text=AAAA
}
define host {
host_name=localhost1
x=280
y=580
recognize_services=1
label_show=1
text=BBBB
}
J'aimerai remplacer AAAA par $var1 et BBBB par $var2
Si j'utilise la commande: sed "/^text/{s/=.*/=$(echo $var1)/}"
Il change AAAA et BBBB par $var1
J'ai essayé de faire:
sed -i.bak "/^localhost/{s/text.*/text $(echo $var1)/}" /usr/local/nagios/share/nagvis/nagvis/etc/maps/demo.cfg
sed -i.bak "/^localhost1/{s/text.*/text $(echo $var2)/}" /usr/local/nagios/share/nagvis/nagvis/etc/maps/demo.cfg
Mais ça ne marche pas :(
Merci pour votre aide
Flipmode
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
2 déc. 2008 à 17:35
2 déc. 2008 à 17:35
Salut,
Utilise les guillemets
Utilise les guillemets
lami20j@debian:~/trash$ cat flipmode define host { host_name=localhost x=180 y=180 recognize_services=1 label_show=1 text=AAAA } define host { host_name=localhost1 x=280 y=580 recognize_services=1 label_show=1 text=BBBB } lami20j@debian:~/trash$ var1=flip;var2=mode lami20j@debian:~/trash$ sed -e "s/AAAA/$var1/" -e "s/BBBB/$var2/" flipmode define host { host_name=localhost x=180 y=180 recognize_services=1 label_show=1 text=flip } define host { host_name=localhost1 x=280 y=580 recognize_services=1 label_show=1 text=mode }
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
2 déc. 2008 à 17:43
2 déc. 2008 à 17:43
Merci pour ta réponse
Le probème c'est que je ne sais ce qu'il y a après text=
Dans mon exemple, j'ai dit que c'était AAAA et BBBB mais ce n'est pas le cas. AAAA et BBBB vont varier, ce sont des résultats de requetes SQL. Donc je ne peux pas substituer AAAA et BBBB et les remplacer par $var1 et $var2
Ta commande: sed -e "s/AAAA/$var1/" -e "s/BBBB/$var2/" flipmode ne marche pas pour moi :(
Merci pour votre aide
Flipmode
Le probème c'est que je ne sais ce qu'il y a après text=
Dans mon exemple, j'ai dit que c'était AAAA et BBBB mais ce n'est pas le cas. AAAA et BBBB vont varier, ce sont des résultats de requetes SQL. Donc je ne peux pas substituer AAAA et BBBB et les remplacer par $var1 et $var2
Ta commande: sed -e "s/AAAA/$var1/" -e "s/BBBB/$var2/" flipmode ne marche pas pour moi :(
Merci pour votre aide
Flipmode
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
3 déc. 2008 à 09:53
3 déc. 2008 à 09:53
Merci à tous pour vos réponses et pour votre rapidité
Les host_name sont toujours localhost et localhost1 donc la commande de jipicy fonctionne:
sed "/localhost/,/}/{
/^text/{s/=.*/=$(echo $var1)/}
}
/localhost1/,/}/{
/^text/{s/=.*/=$(echo $var2)/}
}
" fichier
Je n'ai pas trop compris l'utilisation des } { mais ça marche :) :)
Encore merci à tous les deux
Flipmode
Les host_name sont toujours localhost et localhost1 donc la commande de jipicy fonctionne:
sed "/localhost/,/}/{
/^text/{s/=.*/=$(echo $var1)/}
}
/localhost1/,/}/{
/^text/{s/=.*/=$(echo $var2)/}
}
" fichier
Je n'ai pas trop compris l'utilisation des } { mais ça marche :) :)
Encore merci à tous les deux
Flipmode
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
3 déc. 2008 à 14:20
3 déc. 2008 à 14:20
J'ai vu qu'on pouvait récupérer la 1ere ligne d'un fichier texte en utilisant la commande :
sed -n '1p' /fichier.txt >test.txt
J'aimerai savoir si c'est possible de récupérer uniquement le 1er mot de la 1ere ligne ?
Si oui, en utilisant quelle commande?
Merci d'avance pour votre aide
Flipmode
sed -n '1p' /fichier.txt >test.txt
J'aimerai savoir si c'est possible de récupérer uniquement le 1er mot de la 1ere ligne ?
Si oui, en utilisant quelle commande?
Merci d'avance pour votre aide
Flipmode
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
3 déc. 2008 à 14:40
3 déc. 2008 à 14:40
Re-
Ce sera plus simple avec awk je pense :
Ce sera plus simple avec awk je pense :
awk 'NR == 1 { print $1 }' fichier;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
3 déc. 2008 à 14:44
3 déc. 2008 à 14:44
Je te mets quand même la version avec sed :
sed -n '1 s/\([^ ]*\).*/\1/p' fichierau cas ou...
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
3 déc. 2008 à 15:25
3 déc. 2008 à 15:25
Merci pour ton aide! Ca fonctionne super bien avec awk
:)
:)
flipmode62
Messages postés
49
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
20 mai 2010
3 déc. 2008 à 17:19
3 déc. 2008 à 17:19
J'essaye de faire un script shell en utilisant des conditions mais ça ne marche pas :(
if [$var1>1200] then
echo "test"
#var1=<b><font color=#0c00ff>$var1</font></b>
else
echo "test2"
#var1=<b><font color=#ce0000>$var1</font></b>
fi
line 35: syntax error near unexpected token `else'
line 35: `else'
Merci pour votre aide
Flipmode
if [$var1>1200] then
echo "test"
#var1=<b><font color=#0c00ff>$var1</font></b>
else
echo "test2"
#var1=<b><font color=#ce0000>$var1</font></b>
fi
line 35: syntax error near unexpected token `else'
line 35: `else'
Merci pour votre aide
Flipmode
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
3 déc. 2008 à 17:21
3 déc. 2008 à 17:21
Merci d'ouvrir un nouveau fil s'il te plait...
2 déc. 2008 à 17:58
Je suis d'accord.
Toutefois host_name est toujours localhost et localhost1 ou c'est aussi variable?!
Puisque si ce n'est pas le cas il faut revoir la commande.
2 déc. 2008 à 18:01
Tu as raison, mais j'ai fait avec ce qu'on m'a donné ;-((
Merci toutefois pour ta bienveillance ;-))