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 :

Supprimer sous-chaîne - Sed


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut Supprimer sous-chaîne - Sed
    Bonsoir,

    Je reviens avec sed. Soit res.log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    http://77.150.120.4:80/ - admin:
    http://80.175.118.4/ - admin:
    J'aimerais dégager tous les ": xxx", lorsqu'ils y sont, dans les URL seulement. Pour cela, j'ai écris ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read line
    do
    port=$(echo $line | sed -e 's/^http:.*\(:.*\)\/.*/\1/')
    sed -i "s/$port//" ./data/res.log
    done < ./data/res.log
    J'obtiens les "erreurs" suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed: -e expression n°1, caractère 12: option inconnue pour `s'
    sed: -e expression n°1, caractère 0: pas d'expression régulière précédente
    Pourtant le fichier a bien été modifié comme je le voulais ... Cela provient-il du fait que je modifie le fichier qui est lui-même la source du sed ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    sed devrait suffire à faire le travail (pas besoin de l'inclure dans une boucle while).

    ici, le séparateur de commande sed, que tu utilises, à savoir le /, apparaît dans le motif cherché, donc sed ne comprend plus; il faut donc changé ce séparateur de commande par un caractère qui n'apparaît pas dans le motif !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    J'ai pris le délimiteur | :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read line
    do
    port=$(echo $line | sed -e 's|^http:.*\(:.*\)/.*|\1|')
    sed -i "s/$port//" ./data/res.log
    done < ./data/res.log
    Je n'obtiens maintenant plus que ce message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression n°1, caractère 12: option inconnue pour `s'
    et j'obtiens toujours le fichier voulu.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    c'est parce que ton premier sed laisse passer la deuxième ligne non-modifiée.

    comme je te l'ai dit, tu devrais chercher une solution qui n'emploie pas de boucle while !

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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    D'accord, comme ce n'est pas une erreur qui gêne vraiment, je peux toujours renvoyer l'output dans le néant avec 2>/dev/null (j'ai pas réussi à trouver sans boucle while ...) ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Citation Envoyé par Svengali48
    J'aimerais dégager tous les ": xxx", lorsqu'ils y sont, dans les URL seulement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's@\(http://[^:]*\):[0-9]*\([^/]*/.*\)@\1\2@' fichier
    c'est tout.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat fich 
    http://77.150.120.4:80/ - admin:
    http://80.175.118.4/ - admin:
     
    $ grep -Po 'http://[^/]*\K:[^/]*' fich
    :80
    Édit : j'avais compris le "dégager" dans le sens de faire ressortir et non dans son sens premier, à savoir supprimer
    Toutes mes confuses

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Merci à vous deux

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

Discussions similaires

  1. Recherche de sous chaîne
    Par Sebou77 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 31/03/2006, 19h24
  2. [Tableaux] Retrouver une sous chaîne.
    Par Huntress dans le forum Langage
    Réponses: 8
    Dernier message: 20/03/2006, 15h31
  3. Réponses: 28
    Dernier message: 22/09/2005, 11h57
  4. Supprimer une chaîne
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/02/2005, 19h49
  5. [String] Récupérer une sous -chaîne sans split
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2004, 14h45

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