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 :

shell ajout chaine de caractere dans un fichier


Sujet :

Linux

  1. #1
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut shell ajout chaine de caractere dans un fichier
    Bonjour

    j'ai un fichier toto.txt qui contient une chaine Bonjour
    Je souhaite rajouter un mot avant ou apres Bonjour en restant sur la meme ligne
    J'ai etudier plusieures options:
    echo blabla >> toto.txt ---> me rajoute blabla sur une ligne suivante.
    Pour avant je veux utiliser SED mais même probleme il me rajoute une ligne au debut et n'ecris avant la chaine bonjour.

    Comment faut il procéder svp ? faut il utiliser des expressions regulieres? Si oui cmment faire ?
    Merci de votre aide.

  2. #2
    Membre éclairé 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
    Points : 652
    Points
    652
    Par défaut
    Remplace "Bonjour" par "Bonjour blabla"

    sed -i "s/Bonjour/& blabla/" toto.txt

    Remplace la chaîne de caractère commençant par "Bonjour" par "Bonjour... blabla"

    sed -i "s/Bonjour.*$/& blabla/" toto.txt
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  3. #3
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut
    Ok merci.
    En fait voici a qquoi devrait ressembler mon programme:
    on veut modifier le contenu d'un fichier toto.txt et rajouter a la suite d'une ligne existante tout un tas de mot sortis d'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    listemot = "toto titi tata exemple test again" (etc....)
     
    for mots in $listemot
    do
     
    "sed' ou "awk" ou autre commande pour ecrire a la suite de la chaine bonjour dans le fichier toto.txt chacun des mots present dans la liste ci-dessus.
     
    done
    J'espere avoir été assez précis.
    Merci

  4. #4
    Membre éclairé 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
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par cubepiege
    on veut modifier le contenu d'un fichier toto.txt et rajouter a la suite d'une ligne existante tout un tas de mot sortis d'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    listemot = "toto titi tata exemple test again" (etc....)
    
    for mots in $listemot
    do
    .../...
    done

    Si tu veux ajouter une liste de mots après "bonjour, pourquoi ne pas le faire d'un seul coup comme ceci :

    sed -i "s/Bonjour/& $listemot/" toto.txt
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  5. #5
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut
    Bonjour et bien en fait c'est un peu plus compliqué que çà .
    Cette liste de mot contient une serie de variable qu'il faudra rajouté dans un ensemble de chaines de caractères:
    Je m'explique
    Voici par exemple la chaine initiale présente dans toto.txt:
    Bonjour ,veuillez prendre contact avec moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    listemot = "toto titi tata exemple test again" (etc....)
    for mots in $listemot
    do
    sed ...ou awk .... Bonjour ,veuillez prendre contact avec $mot
    done
    La chaine "Bonjour ,veuillez prendre contact avec" doit etre repeter a chaque fois seul la variable $mot va changer

    Merci

  6. #6
    Membre régulier Avatar de cubepiege
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 161
    Points : 78
    Points
    78
    Par défaut
    Bonjour merci pour ces indications, j'ai finelement trouvé mo bonheur grâce a ton exemple et à l'aide d'une expression reguliere.
    Voici donc mon code final:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #!/bin/bash
     
    MAT="0000193 0000200 0000233 0000275 0000278 0000280 0000284 0000285 0000286 0000287 0000291 0000293 0000294 0000295 0000296 0000303\
     0000312 0000314 0000316 0000523 0000524 0000527 0000528 0000529 0000530 0000531 0000532 0000535 0000536 0000538 0000545 0000555 0000603 0000604 0000690\
     0000730 0000779 0000816 0001017 0001170 0001191 0001192 0402015 0402019 0402021 0402023 0402057 0402117 0404016 0990043 0990097 0990162 0990209 0990362\
     0990368 0990386 0990457 0990604 0990630 0990639 0990649 0990650 0990655 0990656 0990659 0990668 0990669 0990670 0990675 0990676 0990677 0990678 0990680\
     0990682 0990683 0990684 0990685 0990686 0990687 0990690 0990693 0990699 0990700 0990703 0990706 0990709 0990710 0990715 0990716 0990720 0990768 0990792\
     0990937 0990971 0990982 0990984 0991073 0991074 0991077 0991083 0991110 0991121 0991170 0991177 0991189 0991471 0991475 0991506 0991517 0991521 0991545\
     0991569 0991588 0991596 0991604 0991684 0991721 0991747 0991752 0991753 0991785 0991849 0991854 0991864 0991886 0991892 0992212 0992213 0992215 0992216\
     0992454 0992498 0992499 0992543 0992547 0992576 0992612 0992613 0992614 0992750 0992786 0992810 0992818 0992832 0992877 0992884 0992969 0992970 0992971\
     0992978 0993088 0993089 0993090 0993091 0993098 0993102 0993113 0993129 0993248 0993261 0993282 0993419 0993551 0993590 0993677 0993678 0993679 0993691\
     0993692 0993693 0993736 0993777 0993788 0993801 0993827 0993863 0993874 0993875 0993944 0993964 0993968 0993981 0993982 0994087 0994107 0994124 0994162\
     0994167 0994228 0994232 0994284 0994297 0994304 0994311 0994315 0994316 0994318 0994322 0994339 0994470 0994507 0994525 0994548 0994574 0994577 0994593\
     0994614 0994619 0994624 0994625 0994638 0994729 0994757 0994761 0994948 0994951 0994959 0994971 0994972 0994977 0994979 0994980 0994984 0995028 0995112\
     0995118 0995127 0995184 0995204 0995205 0995223 0995226 0995242 0995358 0995382 0995407 0995419 0995421 0995427 0995449 0995466 0995467 0995486 0995488\
     0995492 0995498 0995558 0995570 0995589 0995593 0995626 0995627 0995650 0995673 0995715 0995716 0995749 0995779 0995787 0995791 0995818 0995819 0995827\
     0995833 0995838 0995840 0995883 0995893 0995920 0995961 0995967 0995968 0996026 0996047 0996050 0996099 0996100 0996108 0996112 0996118 0996124 0996127\
     0996143 0996155 0996157 0996166 0996182 0996183 0996184 0996204 0996207 0996216 0996232 0996241 0996254 0996256 0996309 0996340 0996341 0996359 0996360\
     0996361 0996362 0996363 0996364"
     
    for matricule in $MAT
    do
     repbase=/home/scripts
     
    sed -i "s/*/&,AND(WILD(0,\"*_*\",,),EQU(5,\"'$matricule'\")))/" requete.txt
    sed -i "s/^OR/OR(&/" requete.txt
     
    done
    La premiere ligne sed me sert a ecrire a la suite de ma ligne pour ecrire ma requete avec chacun des mtricules.
    La deuxieme ligne me sert a completer ma requete en ecrivant au debut de la ligne. En fait j'avais besoin d'un OR( pour chaque requete avec matricule rajouté(language proprietaire pour un requeteur).
    Bref merci (les expressions regulieres c'est top!)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/10/2007, 20h55
  2. Remplacer une chaîne de caractères dans un fichier .hex
    Par subsix dans le forum Assembleur
    Réponses: 8
    Dernier message: 23/11/2006, 21h06
  3. Réponses: 10
    Dernier message: 16/06/2006, 13h53
  4. Réponses: 10
    Dernier message: 22/05/2006, 11h45

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