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 :

Substitution dernier élément


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
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut Substitution dernier élément
    Bonjour à tous !

    Je bloque sur un problème de substitution avec sed.

    Je dois changer le dernier numéro en "204" pour la liste ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    10.1.2.1
    10.7501.23.203
    10.103.852.65
    Ici le "1" ; "203" et "65" doivent être remplacés par le chiffre 204.

    Mon problème est que la dernière colonne est de longueur variable :
    un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "10.1.2.1" | sed 's/.$/204/'
    10.1.2.204
    ne répond pas à mon besoin pour la ligne suivante "10.7501.23.203".

    Je n'ai pas trouvé d'option dans sed permettant de régler ce paramètre de variabilité
    Dois-je passer par un awk, puis un sed ?

    Je vous remercie par avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    C'est peut être pas le chemin le plus court mais j'ai trouvé une solution : un mélange de awk et sed comme évoqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo "10.1.2.1" | awk -F. '{$NF="204"; print}' | sed 's/ /./g'
    10.1.2.204
     
    $ echo "10.7501.23.203" | awk -F. '{$NF="204"; print}' | sed 's/ /./g'
    10.7501.23.204
     
    $ echo "10.103.852.65" | awk -F. '{$NF="204"; print}' | sed 's/ /./g'
    10.103.852.204
    Avez-vous d'autre solution plus optimisé pour effectuer cela ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\(.*\.\).*$/\1204/'
    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Ou bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e 's/\.[0-9]*$/.204/'

  5. #5
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    awk a l'avantage d'être facilement adaptable aux autres colonnes si besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN{OFS=FS="."} $4=204'

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Un autre awk, si c'est le dernier champs que l'on veut modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F\. 'OFS=FS,$NF=204'
    Un autre sed, si c'est le 4eme champs :

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

Discussions similaires

  1. Copie dernier élément de chaque type, sur la feuille suivante
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 26/07/2006, 09h59
  2. Réponses: 10
    Dernier message: 09/06/2006, 17h02
  3. [PL/SQL] Curseur - Récupération du dernier élément
    Par dupont166 dans le forum Oracle
    Réponses: 5
    Dernier message: 27/12/2005, 04h57
  4. for-each et dernier élément
    Par neptune dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/09/2005, 14h53
  5. Comment récupérer l'index du dernier élément inséré ?
    Par Didier100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 22h41

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