Editer fichier texte par un script
Fermé
guronsan
-
11 sept. 2003 à 15:02
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 22 oct. 2007 à 17:34
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 22 oct. 2007 à 17:34
A voir également:
- Editer un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir un fichier .bin - Guide
21 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
11 sept. 2003 à 15:53
11 sept. 2003 à 15:53
echo mon texte à ajouter >> monfichier.txt
echo "un texte sur plusieurs lignes" >> monfichier.txt
solutions :
-redirections (exemple de sebsauvage)
-sed
-awk
-perl
-vi (evite d'appeler un langage comme sed awk perl)
-redirections (exemple de sebsauvage)
-sed
-awk
-perl
-vi (evite d'appeler un langage comme sed awk perl)
Bonjour,
J'ai un peu le même problème d'éditoin de fichier via un script.
En ce qui me concerne, je veux modifier tous les ";" (point virgules) de mon fichier par des "," (virgules).
Si quelqu'un pouvait m'aider ce serait super. SVP
Merci d'avance
J'ai un peu le même problème d'éditoin de fichier via un script.
En ce qui me concerne, je veux modifier tous les ";" (point virgules) de mon fichier par des "," (virgules).
Si quelqu'un pouvait m'aider ce serait super. SVP
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
17 nov. 2003 à 11:51
17 nov. 2003 à 11:51
Lu,
je suis pas une bete de developpement linux mais il me semble qu il te faut utiliser la commande sed qui permet de faire ca.
Essaye de regarder ss google si sed permet le remplacement de caractere.
Bye
je suis pas une bete de developpement linux mais il me semble qu il te faut utiliser la commande sed qui permet de faire ca.
Essaye de regarder ss google si sed permet le remplacement de caractere.
Bye
coppernix
Messages postés
63
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
18 septembre 2004
4
17 nov. 2003 à 15:00
17 nov. 2003 à 15:00
Bonjour,
(
echo ":1,\$s/;/,/g"
echo "ZZ"
) |vi fichier >/dev/null 2>&1
L'expérience est une lanterne attachée dans notre dos,
qui n'éclaire que le chemin parcouru. Confucius
(
echo ":1,\$s/;/,/g"
echo "ZZ"
) |vi fichier >/dev/null 2>&1
L'expérience est une lanterne attachée dans notre dos,
qui n'éclaire que le chemin parcouru. Confucius
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
17 nov. 2003 à 17:15
17 nov. 2003 à 17:15
Hello,
très amusant d'utiliser vi
Il y a des petits malins qui ont programmé les tours de Hanoï avec vi.
CEPENDANT,
c'est traire une puce avec des gants de boxe.
sed -e 's/;/,/g' < monfic > monfic.$$
mv monfic.$$ monfic
devrait suffire.
Evidemment si il faut effectuer des manipulations complexes mais
pas vraiment du développement vive le perl.
<troll>
c'est d'ailleurs sa seule utilité ..., pour le web Python et
PHP sont tout de même plus lisibles
</troll>
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
très amusant d'utiliser vi
Il y a des petits malins qui ont programmé les tours de Hanoï avec vi.
CEPENDANT,
c'est traire une puce avec des gants de boxe.
sed -e 's/;/,/g' < monfic > monfic.$$
mv monfic.$$ monfic
devrait suffire.
Evidemment si il faut effectuer des manipulations complexes mais
pas vraiment du développement vive le perl.
<troll>
c'est d'ailleurs sa seule utilité ..., pour le web Python et
PHP sont tout de même plus lisibles
</troll>
Johan
The software said "Requires Windows98, Win2000, or better,
So I installed Unix.
coppernix
Messages postés
63
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
18 septembre 2004
4
18 nov. 2003 à 09:12
18 nov. 2003 à 09:12
L'intérêt de vi est de ne pas avoir à passer par un fichier intermédiaire, ce qui provoque parfois la perte de caractères spéciaux.
L'expérience est une lanterne attachée dans notre dos,
qui n'éclaire que le chemin parcouru. Confucius
L'expérience est une lanterne attachée dans notre dos,
qui n'éclaire que le chemin parcouru. Confucius
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
4 avril 2007 à 10:55
4 avril 2007 à 10:55
Bonjour!
Une question du même type, mais j'aimerai comprendre ce que je fais :p
Comment remplacer
"bonjour"
par
"#bonjour"
sachant que je n'ai qu'un seul "bonjour" dans mon texte.
J'avoue qu'avec les ,\$s/;/,/ et les autres, je suis perdu.
Merci
Une question du même type, mais j'aimerai comprendre ce que je fais :p
Comment remplacer
"bonjour"
par
"#bonjour"
sachant que je n'ai qu'un seul "bonjour" dans mon texte.
J'avoue qu'avec les ,\$s/;/,/ et les autres, je suis perdu.
Merci
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
4 avril 2007 à 11:39
4 avril 2007 à 11:39
re,
sed -e 's/bonjour/#bonjour/g' < monfic > monfic.$$
mv monfic.$$ monfic
marche bien :)
Mais si quelqu'un veux bien m'expliquer pourquoi il y a s/ /g ca m'arranngerai merci :)
sed -e 's/bonjour/#bonjour/g' < monfic > monfic.$$
mv monfic.$$ monfic
marche bien :)
Mais si quelqu'un veux bien m'expliquer pourquoi il y a s/ /g ca m'arranngerai 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 897
>
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
4 avril 2007 à 11:47
4 avril 2007 à 11:47
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
>
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
4 avril 2007 à 12:15
4 avril 2007 à 12:15
j'ai regardé un peu mais j'ai une erreur:
cela me retourne :
sed -e expression #1, char 64 :unknown option to 's'
ai je bien fait de mettre \ devant mon " ?
if grep -q "test" /tata/fichier; then if grep -q "#coucou\ "toi\"" /tata/fichier; then sed -e 's/#coucou \"toi\"/coucou \"toi\"/g' </tata/fichier> /tata/fichier.$$ ...
cela me retourne :
sed -e expression #1, char 64 :unknown option to 's'
ai je bien fait de mettre \ devant mon " ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 avril 2007 à 13:58
4 avril 2007 à 13:58
Re-
Si tu veux juste enlever le dièse (#) de devant "coucou", un simple :
Si tu as la version "Gnu-sed" (3.2 et +) d'installée sur ton système, au lieu de passer par un fichier temporaire, tu peux éditer ton fichier directement avec le switch "-i" (in place) :
Si tu veux juste enlever le dièse (#) de devant "coucou", un simple :
then sed -e 's/#coucou/coucou/g' </tata/fichier> /tata/fichier.$$suffit.
Si tu as la version "Gnu-sed" (3.2 et +) d'installée sur ton système, au lieu de passer par un fichier temporaire, tu peux éditer ton fichier directement avec le switch "-i" (in place) :
sed -i.bak 's/#coucou/coucou/g' /tata/fichierle ".bak" créant automatiquement une copie du fichier original (fichier.bak).
skarsnick
Messages postés
79
Date d'inscription
jeudi 15 mars 2007
Statut
Membre
Dernière intervention
17 décembre 2009
59
4 avril 2007 à 14:14
4 avril 2007 à 14:14
en faite j'ai fait une simple faute de frappe, j'ai trouvé et corrigé mon erreur.
pour le coucou, le pb c'est que j'avais :
coucou "toi"
coucou "moi"
etc...
d'où l'utilisation de la chaine en entier
Merci de ton aide :)
pour le coucou, le pb c'est que j'avais :
coucou "toi"
coucou "moi"
etc...
d'où l'utilisation de la chaine en entier
Merci de ton aide :)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 avril 2007 à 18:30
4 avril 2007 à 18:30
sed '/toi/s/#coucou/coucou/'Le remplacement ne sera effectué que si la chaine "toi" est trouvée.
;-))
woolf73
Messages postés
5
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
22 octobre 2007
22 oct. 2007 à 15:44
22 oct. 2007 à 15:44
Bonjour, je souhaite, par des commandes script unix:
compter tout d'abord le nombre de lignes du fichier texte nommée "entree".
puis modifier le 2e élément d'un fichier texte nommée "paramètre" pour le remplacer par le nombre trouvé.
Est-ce que qqun pourrai m'aider plzzzzzz
ps: le fichier paramètre se présente de la manière suivante:
4 5215 3 0.006 3 776 3 456 3 954
ici, remplacer 5215 par le nouveau nombre
compter tout d'abord le nombre de lignes du fichier texte nommée "entree".
puis modifier le 2e élément d'un fichier texte nommée "paramètre" pour le remplacer par le nombre trouvé.
Est-ce que qqun pourrai m'aider plzzzzzz
ps: le fichier paramètre se présente de la manière suivante:
4 5215 3 0.006 3 776 3 456 3 954
ici, remplacer 5215 par le nouveau nombre
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
22 oct. 2007 à 16:03
22 oct. 2007 à 16:03
Salut,
[tmpfs]$ cat entree Ligne n° 1 Ligne n° 2 Ligne n° 3 Ligne n° 4 Ligne n° 5 Ligne n° 6 Ligne n° 7 Ligne n° 8 Ligne n° 9 Ligne n° 10 [tmpfs]$ cat parametre 4 5215 3 0.006 3 776 3 456 3 954 [tmpfs]$ sed 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre 4 10 3 0.006 3 776 3 456 3 954 [tmpfs]$Si tu as une version de "GNU sed", rajoute l'option "-i.BAK" pour modifier le fichier source et faire une copie de sauvegarde par la même occasion :
sed -i.BAK 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre;-))
woolf73
Messages postés
5
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
22 octobre 2007
22 oct. 2007 à 16:43
22 oct. 2007 à 16:43
Un grand merci jipsy, je suis etonné de voir la rapidité avec laquelle tu m'a répondu...
Cependant la ligne ne marche pas exactement comme prévu et lorsque je lance le script avec la ligne de commande:
sed 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre
la console m'affiche:
4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954
et le fichier texte paramètre n'est pas modifié
alors qu'il devrait ressembler à ça:
4 476659 3 0.006 3 776 3 456 3 954
car il ya 476659 lignes dans mon fichier texte entree
bizarre ?!?
je t'avoue ke je suis une merde en script unix, je ne vois pas d'ou le probleme viens alors ke ca doit etre tout simple, tu a le droit de te moquer de moi....
Cependant la ligne ne marche pas exactement comme prévu et lorsque je lance le script avec la ligne de commande:
sed 's/.[^ ]*/ '"$(wc -l < entree)"'/2' parametre
la console m'affiche:
4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954
et le fichier texte paramètre n'est pas modifié
alors qu'il devrait ressembler à ça:
4 476659 3 0.006 3 776 3 456 3 954
car il ya 476659 lignes dans mon fichier texte entree
bizarre ?!?
je t'avoue ke je suis une merde en script unix, je ne vois pas d'ou le probleme viens alors ke ca doit etre tout simple, tu a le droit de te moquer de moi....
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
22 oct. 2007 à 16:50
22 oct. 2007 à 16:50
Bon on va procéder autrement.
var=$(wc -l < entree) sed -i.bak "s/.[^ ]*/ $var/2" parametreCe qui donne :
[tmpfs]$ var=$(wc -l < entree) [tmpfs]$ echo $var 10 [tmpfs]$ cat parametre 4 5215 3 0.006 3 776 3 456 3 954 [tmpfs]$ sed -i.BAK "s/.[^ ]*/ $var/2" parametre [tmpfs]$ cat parametre 4 10 3 0.006 3 776 3 456 3 954 [tmpfs]$;-))
woolf73
Messages postés
5
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
22 octobre 2007
22 oct. 2007 à 17:02
22 oct. 2007 à 17:02
console:
unknown flag i
"parametre" pas modifié !? arf...
unknown flag i
"parametre" pas modifié !? arf...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
22 oct. 2007 à 17:07
22 oct. 2007 à 17:07
Quelle version de sed (sed --version) ? Il faut le version Gnu sed (4.0.5 et supérieure)
Sinon passe par un fichier temporaire :
Sinon passe par un fichier temporaire :
var=$(wc -l < entree) sed "s/.[^ ]*/ $var/2" parametre > fich.tmp mv -f fich.tmp parametre;-))
woolf73
Messages postés
5
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
22 octobre 2007
22 oct. 2007 à 17:14
22 oct. 2007 à 17:14
oui le fichier paramètre est modifié, mais de la manière suivante:
4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954
pkoi $(wc -l < entree) ne donne pas le nombre de ligne de entree?!?
4 $(wc -l < entree) 3 0.006 3 776 3 456 3 954
pkoi $(wc -l < entree) ne donne pas le nombre de ligne de entree?!?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
22 oct. 2007 à 17:24
22 oct. 2007 à 17:24
Je me répète :
Quelle version de sed (sed --version) ?
Quel shell ? Quelle version ?
Ensuite que te renvoie :
Quelle version de sed (sed --version) ?
Quel shell ? Quelle version ?
Ensuite que te renvoie :
var=$(wc -l < entree) echo $var
woolf73
Messages postés
5
Date d'inscription
lundi 22 octobre 2007
Statut
Membre
Dernière intervention
22 octobre 2007
22 oct. 2007 à 17:26
22 oct. 2007 à 17:26
en fait ca marche merci bcp jipsy, tu est un dieu pour moi ....
gros bisous ;)
gros bisous ;)