4 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
#!/bin/bash
echo "toto va à l'école?" > fichier
essaye -ne au lieu de !=
lami20j Répondre à lami20j
6 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
#!/bin/bash
echo "toto va à l'école?" > fichier
Cette technique marche , mais elle ne marche plus dès que le nombre de commande augmente. Comment faire par exemple pour envoyer a un fichier :
"titi va a l'ecole"
"toto est a la maison"
"tata ne fait rien"
merci Répondre à tarikbenn
7 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Re-
echo "titi va a l'ecole" >> fichier
echo "toto est a la maison" >> fichier
echo "tata ne fait rien" >> fichier
Le double chevron ajoute au fichier (alors que le simple écrase).
;-))
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy |
9 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
En shell "ksh" ( par rapport au shell bash), tu as aussi la possibilité de mettre un drapeau ( noclobber) pour empêcher l'écrasement des fichiers en redirection (extrait du man ksh) : > file
standard output is redirected to file. If file does not exist,
it is created; if it does exist, is a regular file and the
noclobber option is set, an error occurs, otherwise the file is
truncated. Note that this means the command cmd < foo > foo
will open foo for reading and then truncate it when it opens it
for writing, before cmd gets a chance to actually read foo.
>| file
same as >, except the file is truncated, even if the noclobber
option is set.
>> file
same as >, except the file an existing file is appended to
instead of being truncated. Also, the file is opened in append
mode, so writes always go to the end of the file (see open(2)).;-))
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy |
|
8 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Re,
ou encore echo -e "titi va a l'ecole\ntoto est a la maison\ntata ne fait rien" > fichier
Mais garde à l'esprit le double chevron :-)
lami20j Répondre à lami20j
10 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Merci les gars pour vos réponses !
Il me reste une dernière question avant la fin de la journée :
Comment, a partir d'un script shell, faire pour aller dans un fichier
qui contient les choses suivantes:
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/
et ajouter a la suite des lignes 8 , 9 et 10 les mots suivants: abc , def et gki.
Merci d'avance Répondre à tarikbenn |
11 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Ajouter comment ?
Donne un exemple du résultet final s'il te plaît, histoire qu'on soit bien d'accord sur l'interprétation ;-))
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy |
12 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Voilà ce que ça pourrait donner, si j'ai bien tout compris ce que tu veux faire : [jp@MDK tmpfs]$ cat fich.txt
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/
[jp@MDK tmpfs]$ sed -i.bak '8s/.*/&abc/;9s/.*/&def/;10s/.*/&gkl/' fich.txt
[jp@MDK tmpfs]$ cat fich.txt
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/abc
QSdsfdsfqdf/def
Qqsdqfdg/gkl
[jp@MDK tmpfs]$ ;-)
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy
13 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Salut Jipicy
J'espere que t'es encore là
En utilisant ta ligne de commande avec sed ,
j'obtiens l'erreur suivante :
sed: illegal option -- i
Je te donne le script que je lance
#!/usr/bin/ksh
echo "taper le nom "
read NOM
echo "taper la version "
read VERSION
echo "taper la version du machin"
read VERSION_M
sed -i.bak '8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/'/start/test/fichier.conf
cat /start/test/fichier.conf
Mais ca ne marche malheureusement pas.
Please help ;) Répondre à tarikbenn |
14 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Il faut que la commande sed et le reste de la commande soit sur la même ligne.
Si c'est une question d'esthétisme pour ton script, il faut rajouter un anti-slash avant le retour à la ligne du genre : sed -i.bak\ '8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/'/start/test/fichier.conf ;-)
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy
15 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Mais c'est sur la même ligne
( c'est juste au niveau du copié collé que ca a découpé la ligne ) Répondre à tarikbenn |
16 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Change les ' quotes simples' par des " quotes doubles" ( guillemets), ça devrait aller mieux ;-)) sed -i.bak "8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/" fichier.conf--
Z'@+...che. JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy
17 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Toujours la même erreur... :( Répondre à tarikbenn |
18 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Pas possible j'ai testé chez moi et ça marche nickel !!!
Colle ton script ici entre lez balises " code" (l e dernier bouton à droite là haut dessus quand tu rédiges ton message), qu'on puisse voir où est le 'blème !!!
Au cas ou, il faut un espace à la fin de la commande sed, entre la fin de la commande et le nom du fichier ( surtout que tu as un chemin absolu commençant par un slash).
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy
19 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Voila le script que j'utilise ( sous Solaris 8 ) :
#!/usr/bin/ksh
echo "taper le nom "
read NOM
echo "taper la version du produit "
read VERSION
echo "taper la version du ma"
read VERSION_M
sed -i.bak "8s/.*/&${NOM}/;9s/.*/&${VERSION}/;10s/.*/&${VERSION_M}/" /start/test/restore.conf
cat /start/test/restore.conf Répondre à tarikbenn |
20 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Ben je comprends toujours pas !!!
Un copier/coller de ton script chez moi (j'ai juste changé le nom du fichier à modifier en "fichier.txt") et tout baigne... [jp@MDK tmpfs]$ cat fichier.txt
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/
QSdsfdsfqdf/
Qqsdqfdg/
[jp@MDK tmpfs]$ ksh tarikbenn.sh
taper le nom
jipicy
taper la version du produit
1er du nom
taper la version du ma
CCM
titi
toto
tata
titi
toto
tata
titi
aretertertzrgg/jipicy
QSdsfdsfqdf/1er du nom
Qqsdqfdg/CCM
[jp@MDK tmpfs]$ J'comprends pô ;-\
Mais au fait c'est quoi l'erreur chez toi ?
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy
21 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Bein oui :/
c vraiment bizarre
l'erreur que je recois est la suivante :
sed: illegal option -- i
voila , j'espere que ca t'aidera à debugger ;) Répondre à tarikbenn |
22 Ce message vous semble utile, votez !- Signaler ce message aux modérateurs
|
Apparemment ta version de sed (aficche la d'ailleurs : sed --version) ne prend pas en compte le paramètre "-i" !!!
Dans ce cas là, essaie dans un premier temps de faire juste l'affichage sur la sortie standard (l'écran) et si y'a pas d'erreur, il faudra alors passer par un fichier temporaire.
Z'@+...che.JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. Répondre à jipicy |
|
|
|
|
|
|
|