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 :

Sed : remplacer uniquement la premiere occurence


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Par défaut Sed : remplacer uniquement la premiere occurence
    Bonjour,

    j'ai une commande qui est censé remplacer uniquement la première occurrence d'une suite de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/<stringProp name=\"LoopController\.loops\">\(.*\)<\/stringProp>/<stringProp name=\"LoopController\.loops\">5<\/stringProp>/" Scenario/ScenarioInit/ScriptCreationUtilisateur.jmx
    Cette commande remplace en fait toutes les occurrences correspondantes trouvées dans le fichier.

    Je n'ai pourtant pas mis l'option "g".. Je ne comprends pas pourquoi cela remplace toutes les occurrences...
    Une idée?

  2. #2
    Membre très actif

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Par défaut
    Cette commande va remplacer la première occurrence de chaque ligne.

    Alors que avec le suffixe g, cette commande remplacerait toutes les occurrences de chaque ligne.

    Si tu connais le numéro de la ligne qui contient le pattern à remplacer, par exemple 4, te peux préfixer la commande s avec ce numéro de ligne. De même si le pattern ne doit être remplacé que dans les lignes 2 à 4.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed '4s/toto/tata/'
    sed '2,4s/toto/tata/'
    Didier

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    386
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 386
    Par défaut
    Et si je ne connais pas la ligne?
    J'execute ce script sur plusieurs fichiers et ce n'est pas forcément la même ligne. Il y a peut etre une astuce avec un grep? Du genre un grep de ce que je cherche dans le fichier, mais au lieu que le grep me renvoie le texte il me renvoie la ligne où il a trouvé le texte... Je regarde dans les options de grep

  4. #4
    Membre expérimenté Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Par défaut
    Tout ce que j'ai trouvé pour le moment avec grep et sed.
    J'ai mis certaines valeurs comme variables à cause des répétitions et c'est plus clair.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    T1='<stringProp name=\"LoopController\.loops\">'
    T2='<\/stringProp>'
    F='Scenario/ScenarioInit/ScriptCreationUtilisateur.jmx'
    sed "$(grep -nm1 ${T1} $F | cut -d':' -f1)s/${T1}\(.*\)${T2}/${T1}5${T2}/" $F

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/06/2009, 09h27
  2. Récupérer uniquement le premier mot d'une phrase
    Par joselito dans le forum Langage
    Réponses: 1
    Dernier message: 19/02/2007, 23h24
  3. Réponses: 21
    Dernier message: 19/12/2006, 12h58
  4. Premiere occurence d'un entier dans une chaine
    Par amika dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 20h04
  5. replacement jusqu'a la premiere occurence d'un terme
    Par HurtMarley dans le forum Web
    Réponses: 3
    Dernier message: 06/02/2006, 15h48

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