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

Shell et commandes GNU Discussion :

Ajouter une chaine de caractère dans toutes les lignes d'un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 27
    Points
    27
    Par défaut Ajouter une chaine de caractère dans toutes les lignes d'un fichier
    Bonjour,
    Explicitons le sujet.
    Je fais du ksh sous linux et j'ai un soucis technique qui semble simple mais rien n'est simple en shell ><.

    Voila une ligne d'un fichier

    2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L

    Je cherche à ajouter après la première virgule de chaque ligne de ce fichier une chaine type "machaine" de préférence dans une variable.

    Repère : les lignes sont relativements identiques nous disposons donc du séparateur , et il faut insérer après cette première mais nous pouvons aussi insérer après le 11 ième caractère.
    J'ai tenté d'utiliser sed qui ne m'a pas l'ai bien adapté mais l'idée aurait été de remplacer pour tout le fichier 20????????? par 20?????????machaine (oui la date n'est pas toujours la même mais commence par 20)

    Merci de vos réponses

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 298
    Points : 12 778
    Points
    12 778
    Par défaut
    Bonjour,

    Voici un début de solution à adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var1=machaine
    echo '2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L' | sed -e 's/\(^[0-9,-]\{11\}\)/\1'$var1'/g'
    Si on traduit la regex:
    ^[0-9,-]\{11\}
    ligne commencant par une chaine de 11 caractères qui peuvent être soit des chiffres ou ',' ou '-'.

    Cordialement.
    Cordialement.

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Autre syntaxe basée sur "sed", en tenant compte que la ligne commence par "20" (/^20/) et que l'ajout se fait juste après la 1ère virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ A='machaine'
     
    $ echo '2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L' | sed '/^20/{s/,/&'"${A}"'/}'
    2013-01-28,machaineTMP_SAVE_CONTRAT,0,8,TAB_CLINT_L
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Dans la solution proposée par zipe31 (que je plussoie par ailleurs), les accolades ne semblent pas indispensables... et, pour simplifier la lecture des quotes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L' | sed "/^20/s/,/&${A}/" 
    ou
    echo '2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L' | sed "/^20/s/,/,${A}/"
    Pour chaque ligne commençant par "20", remplacer la première virgule par une virgule suivie du contenu de la variable "A".

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Dans la solution proposée par zipe31 (que je plussoie par ailleurs), les accolades ne semblent pas indispensables...
    C'est vrai, mais ça ne mange pas de pain et pour moi ça clarifie bien la cible.

    et, pour simplifier la lecture des quotes:
    Une des raisons pour laquelle j'ai toujours préféré l'utilisation de simples quotes autour des expressions de "sed", c'est que la négation pour "sed" se marque avec le point d'exclamation ( ! ) et que bien souvent le shell (bash pour moi) n'aime pas trop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo '2013-01-28,TMP_SAVE_CONTRAT,0,8,TAB_CLINT_L' | sed "/^20/!{s/,/&${A}/}"
    bash: !{s/,/: event not found
    Mais il est vrai que les imbrications de quotes sont bien souvent imbuvables
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 19
    Points : 27
    Points
    27
    Par défaut
    Ok j'ai noté tout ça et j'ai fait quelque chose dans ce sens à force de mon coté et c'est good merci à tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/01/2013, 09h44
  2. Réponses: 1
    Dernier message: 02/10/2012, 11h14
  3. Réponses: 3
    Dernier message: 02/10/2012, 08h27
  4. Réponses: 1
    Dernier message: 12/04/2007, 16h54
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35

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