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 contenant une variable


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Sed contenant une variable
    Bonjour à tous, je souhaiterai modifier le dernier caractère de la troisième ligne d'un fichier (qui s'appelle em1) commençant par IP .
    Je souhaiterai remplacer ce caractère par un autre contenu dans une variable

    je code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    ip=$(sed 's/^.\{7\}\(.\).*/\1/' /etc/hotsname)
    cat ./em1 | sed -e "s/\(IPADDR.*\).$/\1${ip)/i" ./em1
    Sauf que la requete sed suivante ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e "s/\(IPADDR.*\).$/\1${ip)/g" ./em1
    Merci de votre aide .

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Peut être en protégeant la séquence ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\(IPADDR.*\).$/\1'${ip)'/g' ./em1
    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 éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    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 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,

    Non, il y a juste une erreur de syntaxe: crochet ouvrant et parenthèse fermante au lieu de crochet fermant.
    Cordialement.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Bien vu !
    Il faudrait peut être que je change de lunettes
    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.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ip=$(sed 's/^.\{7\}\(.\).*/\1/' /etc/hotsname)
    cat ./em1 | sed -e "s/\(IPADDR.*\).$/\1${ip)/i" ./em1
    Je ne vois pas en quoi la réponse est en face de l'énoncé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ip=$(sed 's/^.\{7\}\(.\).*/\1/' /etc/hotsname)
    ip contient donc l'intégralité du fichier /etc/hotsname dont on a retenu que les 7 premiers caractères de chaque ligne.
    Je doute que ce soit le résultat attendu.

    dernier caractère de la troisième ligne d'un fichier
    Troisième ligne: le script sed commence par 3. N'est-ce pas ?
    dernier caractère de la troisième ligne d'un fichier
    Le dernier caractère est indiqué par le signe de fin de ligne: $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat ./em1 | sed -e "s/\(IPADDR.*\).$/\1${ip)/i" ./em1
    Cette commande est bizarre. em1 est envoyé 2 fois à sed ...
    • Soit tu utilises un pipe et tu ne mets pas de cible à sed.
    • Soit tu mets une cible à sed et tu ne fais pas de pipe.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Candidat au Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    bonjour et merci pour vos reponse .
    Pour répondre à Flodelarab la réponse directe de l'énoncé se trouve dans la deuxième ligne de code, j'ai mis la première du programme par erreur.
    Ensuite il y a un erreur de syntaxe (merci disedorgue) soit en corrigeant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/\(IPADDR.*\).$/\1'${ip}'/g' ./em1

    La solution la plus simple et elégante à mon goût est celle ci (suggéré par Flodelarab):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed '3s/.$/'$ip'/' ./em1

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

Discussions similaires

  1. Requête au sein d'une fonction contenant une variable
    Par hel22 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/07/2007, 13h03
  2. Actualiser une zone de texte contenant une variable
    Par moromain dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/06/2007, 09h11
  3. [VBA-E] Chemin d'accès contenant une variable
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2007, 11h42
  4. [VBA-E] chemin d'acces contenant une variable
    Par surfeuse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/06/2006, 10h07
  5. [ADO] requete contenant une variable ?
    Par kam dans le forum MFC
    Réponses: 9
    Dernier message: 28/04/2004, 11h08

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