IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

modification de fichier texte en shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut modification de fichier texte en shell
    Bonjour,

    Je débute sur les script shell et j'aimerai écraser mon fichier $fic après avoir remplacer les espaces qui le composent par des ;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for fic in *.txt                      #Pour tous les fichiers texte du dossier
    do
    for i in `cat *.txt`                 #Lecture du contenu
    	do
    	sed "s/  /;/g" *.txt > tmp    #remplacement (pas de problème), envoi vers un fichier nommé tmp
    	mv tmp $fic  #renommage par le nom de fichier initial (MARCHE PAS)
    	done
    done


    il me le renomme en tmp (en fait il me le renomme pas)

    y a un problème avec la variable de la première boucle ??


    Merci d'avance pour votre aide

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par jonathan1
    Bonjour,

    Je débute sur les script shell et j'aimerai écraser mon fichier $fic après avoir remplacer les espaces qui le composent par des ;
    .../...

    Solution (l'option -i de sed évite de passer par un fichier intermédiaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for file in *txt ; do
        sed -i "s/ /;/g" $file
    done

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Bonjour

    J'utilise shell sous windows et apparemment l'option -i n'est pas connue.

    Le problème, c'est qu'en fait, avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for fic in *.txt                      #Pour tous les fichiers texte du dossier
    do
    for i in `cat *.txt`                 #Lecture du contenu
    	do
    	sed "s/  /;/g" *.txt > $fic 
    	done
    done
    il me vide le fichier source.

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    nb=0
     
    for fic in *.txt
    do
    let "nb += 1"
     
    for i in $fic
    	do
    	sed "s/  /;/g" $fic> "fichier$nb.txt"
    	done
     
    done
    Je pourrai faire comme ca mais dans ma deuxième boucle, j'ai l'impression qu'il ne reprend pas la variable $fic

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for i in *; do
         mv "$i" "`echo "$i" | tr \  _`"
    done  #renommage des fichiers car si il y a des espaces, il ne prend pas le nom des fichier entièrement
     
    for fic in *txt
    do
    let "nb += 1"
     
    for i in `cat "$fic"`
    	do
    	sed "s/  /;/g" $fic> "$nb$fic"
    	done
     
    done
    Voila, j'ai à peu prés obtenu le résultat escompté . J'aurai préféré ne pas avoir à renommer les fichiers (1ere boucle).
    Si quelqu'un à une explication pour ca...

    Merci

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Si tu as accès à perl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pi -e 's/  /;/g' ton_fichier
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Non pas de perl...

    Par contre, autre question :

    Comment utiliser sed pour qu'il ne prenne en compte que les chaines consécutives d'au moins deux caractères.

    j'ai essayémais il prend tous les caractères.

    RE autre question :

    quel code utiliser pour le retour chariot.


    MERCI

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    enfin il y a quand meme un probleme dans ton truc ......
    pour tout les fichiers d'un repertoire .... OK
    mais une boucle sur le contenue du fichier pour passer pas sed ... Aie Aie
    sed directement, sed traite un fichier complet et nom pas une ligne ....

    pour au moins 2 caracteres utilise .. (2points) puis l'etoile soit ..*

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    "index" devrait suffir

    Je suis à l'écoute de vos remarques, suggestions.

    Merci à tous pour votre aide.

  10. #10
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Bonjour,

    Je reviens...

    Je souhaite désormais supprimer toute les lignes sauf celles commencant par certains mots.
    J'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "/^mot/!d" $file > 1$file
    cependant dés lors que je souhaite spécifier plusieurs mots, ca ne passe pas. J'ai essayé avec des crochets et des caractères de ponctuation mais...
    Dans un tube, le résultat est erroné.

    Merci d'avance pour votre aide.

  11. #11
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Citation Envoyé par jonathan1
    Bonjour,

    Je reviens...

    Je souhaite désormais supprimer toute les lignes sauf celles commencant par certains mots.

    egrep -v "^(mot1|mot2|mot3)" infile > outfile

    http://man.developpez.com/man1/egrep.1.php

  12. #12
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Merci beaucoup,

    C'est sans l'option '-v' pour ce que je voulais.



    Tu ne seras bientôt plus un padawan à cette alure

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Merci beaucoup,

    J'ai obtenu tout ce dont j'avais besoin.

    sed/awk/grep/cut/tr

    Ces commandes m'ont permis de faire a peu prés ce que je voulais.

    Merci encore

  14. #14
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 243
    Par défaut
    Bonjour,

    Une dernière ch'tite question,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for file in *.txt ;
    do
    ...
    done
    Ca me permet d'executer mon script sur tous les fichiers du dossier.
    Est-ce qu'il y a moyen qu'il le fasse aussi dans des sous dossiers, ca m'arrangerait...

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] modif de fichier texte => ordonnancements
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 11
    Dernier message: 22/02/2010, 21h59
  2. Création modification de fichiers texte
    Par thierrybatlle dans le forum WinDev
    Réponses: 4
    Dernier message: 04/04/2007, 15h37
  3. modification de fichier texte en batch
    Par ob1knob dans le forum Windows
    Réponses: 15
    Dernier message: 03/10/2006, 17h10
  4. Modification de fichier texte
    Par jiloup dans le forum C++
    Réponses: 3
    Dernier message: 28/12/2005, 19h28
  5. Modification de fichiers texte
    Par ratbiker dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2005, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo