Editer fichier texte par un script

guronsan -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
salut,
Est-ce que quelqu'un sait comment editer un fichier texte dans un script.
En fait je cherche un moyen de rajouter une ligne à un fichier texte par un script.
meri d'avance.

21 réponses

  • 1
  • 2
  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    echo mon texte à ajouter >> monfichier.txt


    echo "un 
    texte
    sur 
    plusieurs
    lignes" >> monfichier.txt
    0
  2. francoispgp
     
    solutions :
    -redirections (exemple de sebsauvage)
    -sed
    -awk
    -perl
    -vi (evite d'appeler un langage comme sed awk perl)
    0
  3. Le Squale
     
    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
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Utilisateur anonyme
     
    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
    0
  6. coppernix Messages postés 63 Statut Membre 4
     
    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
    0
  7. jisisv Messages postés 3678 Statut Modérateur 936
     
    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.
    0
  8. coppernix Messages postés 63 Statut Membre 4
     
    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
    0
  9. skarsnick Messages postés 79 Statut Membre 59
     
    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
    0
    1. skarsnick Messages postés 79 Statut Membre 59
       
      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 :)
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > skarsnick Messages postés 79 Statut Membre
         
        Salut,

        Regarde dans la FAQ : Sed - Substitution
        0
      2. skarsnick Messages postés 79 Statut Membre 59 > skarsnick Messages postés 79 Statut Membre
         
        j'ai regardé un peu mais j'ai une erreur:

        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 " ?
        0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    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/fichier
    le ".bak" créant automatiquement une copie du fichier original (fichier.bak).
    0
    1. skarsnick Messages postés 79 Statut Membre 59
       
      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 :)
      0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
     sed '/toi/s/#coucou/coucou/'
    Le remplacement ne sera effectué que si la chaine "toi" est trouvée.

    ;-))
    0
  12. woolf73 Messages postés 5 Date d'inscription   Statut Membre
     
    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
    0
  13. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    ;-))
    0
  14. woolf73 Messages postés 5 Date d'inscription   Statut Membre
     
    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....
    0
  15. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Bon on va procéder autrement.
    var=$(wc -l < entree)
    sed -i.bak "s/.[^ ]*/ $var/2" parametre
    Ce 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]$
    ;-))
    0
  16. woolf73 Messages postés 5 Date d'inscription   Statut Membre
     
    console:
    unknown flag i

    "parametre" pas modifié !? arf...
    0
  17. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Quelle version de sed (sed --version) ? Il faut le version Gnu sed (4.0.5 et supérieure)

    Sinon passe par un fichier temporaire :
    var=$(wc -l < entree)
    sed "s/.[^ ]*/ $var/2" parametre > fich.tmp
    mv -f fich.tmp parametre
    ;-))
    0
  18. woolf73 Messages postés 5 Date d'inscription   Statut Membre
     
    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?!?
    0
  19. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Je me répète :
    Quelle version de sed (sed --version) ?
    Quel shell ? Quelle version ?

    Ensuite que te renvoie :
    var=$(wc -l < entree)
    echo $var
    0
  20. woolf73 Messages postés 5 Date d'inscription   Statut Membre
     
    en fait ca marche merci bcp jipsy, tu est un dieu pour moi ....
    gros bisous ;)
    0
  • 1
  • 2