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 :

sed : insertion d'une chaine variable au début de chaque ligne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 51
    Par défaut sed : insertion d'une chaine variable au début de chaque ligne
    Bonjour,
    j'ai besoin d'ajouter une chaine au début de chaque ligne d'un fichier.
    la commande suivante marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/.*/chaineAajouter &/' fichier.txt
    j'aimerai changer chaineAajouter par la variable $var=chaineAjouter

    Est ce que je peux toujour utiliser la commande sed ?

    j'ai pu me dépanner avec les lignes suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var=chaineAjouter
    while read line
    do
    echo "$var $line">>fichierTmp.txt
    done < fichier.txt
    Si je pourrai toujours utiliser la commande sed ca sera mieux.
    Merci pour l'aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    A la condition que ta variable chaineAajouter ne contienne pas le caractère /, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*/'"${chaineAajouter}"' &/' fichier.txt
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé

    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
    Par défaut
    Salut,
    Citation Envoyé par al1_24 Voir le message
    A la condition que ta variable chaineAajouter ne contienne pas le caractère /, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*'"${chaineAajouter}"' &/' fichier.txt
    Et si elle le contenait, il suffit d'en changer (le début de ligne peut être juste marquer par "^" et du fait le "&" est obsolète) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's#^#/'"${chaineAajouter}"' #' fichier.txt

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    A la condition que ta variable chaineAajouter ne contienne pas le caractère /, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/.*/'"${chaineAajouter}"' &/' fichier.txt
    Ce n'est pas suffisant!
    En principe, il faut quoter TOUS les métacaractères de sed qui peuvent gêner dans la 2ème partie du substitute: le séparateur (/ ou # (dans l'exemple de zipe31)), mais aussi le backslash '\' et le '&', d'où, pour être rigoureux, quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    s='/'  # On choisit un séparateur pour sed (n'importe quoi sauf '|', utilisé plus loin)
    var="chaîne à ajouter avec un slash ${s}, un backslash \\ et un ampersand &."
    echo "var == ${var}"  # pour voir
    str=$(echo "${var}" | sed -e "s|[${s}&\]|\\\\&|g") # On quote tout ce qu'il faut (s <> '|')
    echo coucou | sed -e "s${s}^${s}${str}${s}"  # Belle instruction, non?
    chaîne à ajouter avec un slash /, un backslash \ et un ampersand &.coucou
    # Chouette résultat!
    Bon... y en a qui chipotent...

  5. #5
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Bon... y en a qui chipotent...
    Vi, il manque une majuscule à "coucou" (après un point....) sans parler de l'espace aussi

    Par contre s'il faut penser à tout, ça va devenir imbuvable, je pense notamment aux guillemets

    Sinon, beau travail/exemple s'il en est

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Vi, il manque une majuscule à "coucou" (après un point....) sans parler de l'espace aussi
    Alors là, je dirais qu'il y en a qui chipotent!

    Par contre s'il faut penser à tout, ça va devenir imbuvable, je pense notamment aux guillemets
    Pour les guillemets, ce n'est pas un problème. Et je le prouve (avec une majuscule (voire deux)):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ s='/'
    $ var="Chaîne à ajouter avec un slash ${s}, un backslash \\, un guillemet \", une apostrophe ' et un ampersand &. "  
    $ str=$(echo "${var}" | sed -e "s|[${s}&\]|\\\\&|g")                                                                 
    $ echo "$str"                                                                                                        
    Chaîne à ajouter avec un slash \/, un backslash \, un guillemet ", une apostrophe ' et un ampersand \&. 
    $ echo Coucou. | sed -e "s${s}^${s}${str}${s}"                                                                        
    Chaîne à ajouter avec un slash /, un backslash \, un guillemet ", une apostrophe ' et un ampersand &. Coucou.
    Sinon, beau travail/exemple s'il en est
    Merci pour le compliment (en fait, il se trouve que je suis payé pour ça (pas pour les compliments, mais pour améliorer la fiabilité du code (et donc penser à tout (ou presque))). Ici j'ai juste recopié 2 des 50.000 lignes... qui ont été éprouvées... (merci le test driven!))

    )jack(

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 51
    Par défaut
    Merci les amis

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

Discussions similaires

  1. utilisation de SED pour ajouter une chaine de caractère en début de texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/03/2008, 10h12
  2. insertion d'une chaine dans une table
    Par Sebastien_INR59 dans le forum Access
    Réponses: 4
    Dernier message: 07/07/2006, 12h39
  3. [VB6] Insertion dans une chaine de caractères
    Par jerzy59 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/05/2006, 14h54
  4. [MFC] Insertion d'une chaine de caractère dans une BD
    Par julien.nasser dans le forum MFC
    Réponses: 2
    Dernier message: 20/04/2006, 16h19
  5. Compter les occurences d'un car dans une chaine/variable
    Par sherlockfr dans le forum Windows
    Réponses: 2
    Dernier message: 10/11/2005, 08h48

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