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 :

Remplacement de chaîne


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut Remplacement de chaîne
    Bonjour à tous je recherche la bonne syntaxe afin de remplacer des éléments dans un fichier texte, la difficulté réside dans le fait que je ne connais pas à l'avance le contenu du paramètre, je pensais donc remplacer la ligne entière. L'intitulé "parametre2" est connu et fixe

    Fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -parametre1 ceciestmonpremierparametrealeatoire
    -parametre2 ceciestmondeuxiemeparametrealeatoire
    -parametre3 ceciestmontroisiemeparametrealeatoire
    Fichier désiré après commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -parametre1 ceciestmonpremierparametrealeatoire
    -parametre2 nouveauparametre
    -parametre3 ceciestmontroisiemeparametrealeatoire
    Je compte utiliser la commande "sed" qui revient souvent, j'ai cependant un doute sur comment interpréter le tiret "-" dans sed, une idée sur mon erreure de syntaxe ?

    Proposition de commande (ne fonctionne pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i '2s/-parametre2 */-parametre2 nouveauparametre/' ./fichier.txt

  2. #2
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Il me manquait l'échappement devant les tirets ainsi que le point devant l'étoile pour match correctement, c'est résolu
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/\-parametre2.*/\-parametre2 nouveauparametre\ /g' ./fichier.txt

  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,
    Citation Envoyé par Lekno Voir le message
    Il me manquait l'échappement devant les tirets
    Non ! Échapper le tiret n'est absolument pas nécessaire.

    Par contre, s'il s'agit de faire un remplacement de ligne via le numéro de ladite ligne, la commande "c \" (change) serait beaucoup plus adéquate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat fich 
    -parametre1 ceciestmonpremierparametrealeatoire
    -parametre2 ceciestmondeuxiemeparametrealeatoire
    -parametre3 ceciestmontroisiemeparametrealeatoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed '2 c\-parametre2 nouveauparametre' fich 
    -parametre1 ceciestmonpremierparametrealeatoire
    -parametre2 nouveauparametre
    -parametre3 ceciestmontroisiemeparametrealeatoire
    $ 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
    Citation Envoyé par Lekno Voir le message
    Il me manquait l'échappement devant les tirets ainsi que le point devant l'étoile pour match correctement, c'est résolu
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/\-parametre2.*/\-parametre2 nouveauparametre\ /g' ./fichier.txt
    Le 'g' en fin de commande ne sert que si tu as plusieurs remplacements à faire sur la même ligne.

    Au cas improbable où "parametre2" apparaîtrait ailleurs qu'en début de ligne, on pourrait ajouter le "^" de début de ligne:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i 's/^-parametre2.*/-parametre2 nouveauparametre /' fichier.txt

    Le '\' est inutile devant l'espace et le './' devant le nom de fichier aussi.

  5. #5
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Merci pour vos retours, j'ai oublié un cas possible :

    - Dans le cas ou le paramètre est commenté ma syntaxe est caduc

    Via la commande ci-dessous je n'ai aucun changement , une idée de l'erreur ? ( ca matche sur regex101)

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/#?-parametre1.*/-parametre1 parametre1conf\" monfichier.conf

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s/#\?-parametre1.*/-parametre1 parametre1conf/" monfichier.conf
    il faut échapper le ? et el dernier / n'était pas dans le bon sens.
    Sous Kubuntu 20.04

  7. #7
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    C'était bien ça merci

    PS: Il faut échapper le ? afin qu'il ne soit pas considéré comme un élément de la chaine ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    oui.
    Sous Kubuntu 20.04

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

Discussions similaires

  1. Fonction pour remplacer String dans une feuille
    Par Canyata dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/08/2014, 13h37
  2. [Solaris] [Bash] Remplacement de caractères
    Par Ekozium dans le forum Shell et commandes POSIX
    Réponses: 7
    Dernier message: 01/06/2014, 19h45
  3. remplacer "string" et la formater
    Par emulamateur dans le forum VBA Word
    Réponses: 4
    Dernier message: 02/09/2012, 11h29
  4. [BASH] Remplacer une série d'espace
    Par Mister_Kp dans le forum Linux
    Réponses: 5
    Dernier message: 10/05/2011, 09h29
  5. Remplacer string unicode dans exe
    Par Stolker dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 18/05/2010, 15h21

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