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 POSIX Discussion :

Remplacer le caractère qui précède à un "pattern"


Sujet :

Shell et commandes POSIX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Remplacer le caractère qui précède à un "pattern"
    Quelqu'un sait comment changer le caractère précédent à une deuxième, troisième, quatrième...occurrence?
    Je m'explique:
    Disons que j'ai la ligne
    salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc
    , je voudrais remplacer le espace par un retour de chariot mais juste les espaces qui précédent le mot "salut" à partir de la deuxième et plus d'occurrences.
    Donc le résultat serait:
    salutnkc sdnclsdckvv
    salutiqpnbdfemdcn
    salutnv kaksnc
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 386
    Points
    19 386
    Par défaut
    le premier salut n'étant pas précédé par un espace, il n'y a rien de compliqué à faire ça avec sed (chercher : référence arrière).

    PS: Bonjour !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    merci de votre réponse rapide. Le français n'est pas ma langue maternelle et j'ai fait une mauvais copier/coller en oubliant le "Bonjour".
    J'ai beaucoup cherché et je pensais avoir une réponse rapide dans ce forum.
    Merci quand même.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour et bienvenue,

    La solution explicite à ton souci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc ' | sed 's/ \(salut\)/\n\1/g'
    salutnkc sdnclsdckvv
    salutiqpnbdfemdcn
    salutnv kaksnc
    Cordialement.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour disedorgue,
    ça marche dans les linux mais pas dans les hp-ux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc ' | sed 's/ \(salut\)/\n\1/g'
    salutnkc sdnclsdckvvnsalutiqpnbdfemdcnnsalutnv kaksnc
    Il semble que sed ajoute n à la place de \n.

    J’aimerais vous envoyer la version de sed mais sed --version ne marche pas ni sed -V non plus.

    Merci

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Ok, une version plus générique (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc ' | sed 's/ \(salut\)/\
    \1/g'
    PS: Respecter le retour à la ligne.
    Cordialement.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc ' | sed 's/ \(salut\)/\
    \1/g'
    sed: Function s/ \(salut\)/ cannot be parsed.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Le problème, c'est que je n'ai pas de machine hp-ux pour tester...

    Si tu as du perl sur toutes tes machines, tu peux essayer la commande ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo 'salutnkc sdnclsdckvv salutiqpnbdfemdcn salutnv kaksnc ' | perl -pe 's/ (salut)/\n\1/g'
    salutnkc sdnclsdckvv
    salutiqpnbdfemdcn
    salutnv kaksnc
    Cordialement.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Novembre 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci disedorgue!...avec perl ça marche sur toutes mes machines.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/12/2014, 11h07
  2. [sed] Remplacer une chaine qui précède une autre chaine
    Par noooop dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 25/03/2014, 09h31
  3. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24

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