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 & caractère *


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut sed & caractère *
    Salut à tous,

    Je suis dans la lecture du HS Linux Magazine sur les script Shell, et j'ai un truc que je n'arrive pas a comprendre :

    Le but est de remplacer les espaces par des tiret, mais il y'a une chose que je ne comprend pas : le *, quelqu'un pourrait il éclairer ma lanterne : de ce que j'en lis, celà veut dire toute les occurrence ou alors cela signifierait "O ou plus"..

    si j'applique cette commande a ce texte : #test test J'obtiens : -#-t-e-s-t-t-e-s-t- et je ne comprend pas pourquoi. Les espaces sont bien remplacés par des '-' mais il en met aussi partout...

    Quelqu'un pourrait il éclairer ma lanterne ?

    D'avance merci,
    Yo

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 133
    Par défaut
    Comme tu l'as bien dit, le marqueur * signifie un nombre indéfini d'occurrences, y compris aucune, de la chaine précédente, l'espace dans l'exemple donné.
    Et le résultat d'exécution que tu présentes est tout à fait normal et conforme à la demande.
    Il n'y a aucune occurrence du caractère espace entre chaque caractère de la chaine à traiter, c'est pourquoi un tiret est inséré entre eux et l'unique espace présente est aussi remplacée par un tiret.

    Pour ne remplacer que l'espace, il aurait fallu utiliser le marqueur + qui signifie une ou plusieurs occurrences de la chaine précédente.
    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
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut
    Merci a toi, a la fois pour les balise de code et la réponses !

    Bonne journée,
    Yoann

  4. #4
    Expert confirmé

    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
    Par défaut
    Salut,
    Citation Envoyé par al1_24 Voir le message
    Pour ne remplacer que l'espace, il aurait fallu utiliser le marqueur + qui signifie une ou plusieurs occurrences de la chaine précédente.
    Ou doubler le caractère espace :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ sed 's/ */-/g' <<<"#test test"
    -#-t-e-s-t-t-e-s-t-
     
    $ sed 's/  */-/g' <<<"#test test"
    #test-test
    Ce qui se traduit par : une espace, suivie d'aucune, d'une ou plusieurs espace(s)…


  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut
    Ahhhhh Mais oui, je parie qu'il y'a deux espaces dans le script, mais difficile de compter le nombre d'espace surtout sur un magazine ! :-D

    Alors avec deux espace et le * ca marche bien et je comprend bien.

    Par contre pour le +, ca ne rend rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sed -e 's/ +/-/g' sed.txt
    #test    test

  6. #6
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par yoyolut Voir le message
    Par contre pour le +, ca ne rend rien
    Parce qu'il faut protéger le caractère "+" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed 's/ \+/-/g' <<<"#test   test"
    #test-test

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut
    Je n'ai jamais aimé sed, je me souviens bien pourquoi maintenant...

    Merci pour ce retour, je vais me re plonger dans les expressions régulière

    Bon week-end,
    Yoann

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

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