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 :

Caractère échappement sed (part 2)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 141
    Par défaut Caractère échappement sed (part 2)
    Bonsoir,

    N'étant pas "toujours" satisfait des astuces que je trouve (euphémisme ), je fais référence à ce fil pour pousser un peu plus loin la réflexion et voir si il y a mieux que mon résultat.

    http://www.developpez.net/forums/d12...happement-sed/

    Effectivement c'est bien pratique de pouvoir adapter nos délimiteurs de champs sed dans les substitutions, mais quid de sed -n "/motif/p" ou sed -n '/motif/!d' ... Ben ça marche pas.
    '%?,# etc' comme délimiteur, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo -e "/path/to/machin1\n/path/to/machin2\n/path/to/machin3" | sed '#/path/to/machin2#!d'
    /path/to/machin1
    /path/to/machin2
    /path/to/machin3
    echo -e "/path/to/machin1\n/path/to/machin2\n/path/to/machin3" | sed -n '#/path/to/machin2#p'
    ... idem ...


    Par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ motif="/path/to/machin2" ; liste="/path/to/machin1\n/path/to/machin2\n/path/to/machin3" ; sed -n "/$(sed 's%/%\\\/%g' <<< $motif)/p" < <(echo -e $liste)
    /path/to/machin2
    j'utilise des chaînes mais liste peut très bien être un fichier (à adapter en conséquence). Est-ce qu'il y a une meilleur astuce ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo -e "/path/to/machin1\n/path/to/machin2\n/path/to/machin3" | sed '\#/path/to/machin2#!d'
    /path/to/machin2
    $
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 141
    Par défaut
    Diantre !

    mais .... Quid de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat testage
    /path/to/machin1
    /path/to/machin3
    /path/to/machin4
    /path/to/machin5
    denis@machine:~$ motif=/path/to/machin4 ; sed -n "\#$motif# !d" testage ; cat testage
    sed: -e expression n°1, caractère 22: caractères inutiles après la commande
    /path/to/machin1
    /path/to/machin3
    /path/to/machin4
    /path/to/machin5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ motif=/path/to/machin4 ; sed -n '\#'"$motif"'#!d' testage ; cat testage
    /path/to/machin1
    /path/to/machin3
    /path/to/machin4
    /path/to/machin5

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    on ne peut pas utiliser -n et !d ne même temps, puisque -n empêche l'affichage !
    c'est soit -n et p, soit seulement p.

    et, pour le point d'exclamation, ce sera apostrophes.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 141
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    on ne peut pas utiliser -n et !d ne même temps, puisque -n empêche l'affichage !
    c'est soit -n et p, soit seulement p.
    Oui ça c'est parce que je testais des trucs et pas recopié la bonne commande
    Effectivement , je cherchais à faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    motif=/path/to/machin4 ; sed -i "\#$motif#d" testage ; cat testage
    /path/to/machin1
    /path/to/machin3
    /path/to/machin5
    Et ça marche ... Bon et bien j'étais passé un peu vite sur l'échappement du premier caractère délimiteur, ici #
    maintenant, pourquoi seulement le premier, mystère ?

    Citation Envoyé par N_BaH Voir le message
    et, pour le point d'exclamation, ce sera apostrophes.
    obligatoire ok, donc du coup faut bidouiller quand motif est une variable.
    Merci

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

Discussions similaires

  1. Extraire une valeur d'une ligne avec sed
    Par jojolepabo dans le forum Linux
    Réponses: 6
    Dernier message: 27/10/2004, 09h34
  2. Réponses: 8
    Dernier message: 18/05/2004, 10h03
  3. Makefile et sed
    Par pitistef dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 10/02/2004, 15h06
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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