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

Linux Discussion :

Gérer les espaces avec SED


Sujet :

Linux

  1. #1
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut Gérer les espaces avec SED
    [DEB,Sarge,KSH]

    Bonjour,

    Dans mon fichier /etc/inetd.conf, je souhaite ajouter un "#" à la ligne "ident".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IDENT=`cat /etc/inetd.conf | grep ident`   #pour " ident           stream  tcp     wait    identd  /usr/sbin/identd        identd"
    sed -i "s/$IDENT/#$IDENT/" /etc/inetd.conf
    Il ne semble pas trouver la ligne, est-ce à cause des espaces sur cette ligne ?


    Merci

    Laurent

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Pourquoi mets tu un $ devant ton ident ?
    Dés qu'il y a une caractère litigieux dans ce que tu cherches où ce que tu veux mettre, n'hésite pas à le protéger avec backquote '\'.

  3. #3
    Membre actif
    Inscrit en
    Août 2005
    Messages
    698
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 698
    Points : 252
    Points
    252
    Par défaut
    Le "$", c'est pour dire que "IDENT" est une variable.
    c'est une erreur ?

  4. #4
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Tu pourrais :


    Voila ce que ca donnerais :

    sed -i s/ident stream tcp wait identd /usr/sbin/identd identd/#ident stream tcp wait identd /usr/sbin/identd identd/ /etc/inetd.conf


    Comme tu peux le constater, les expressions ne ressemblent pas trop à des expressions régulieres.

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par becket
    Tu pourrais :


    Voila ce que ca donnerais :

    sed -i s/ident stream tcp wait identd /usr/sbin/identd identd/#ident stream tcp wait identd /usr/sbin/identd identd/ /etc/inetd.conf


    Comme tu peux le constater, les expressions ne ressemblent pas trop à des expressions régulieres.
    ça ne va certainement pas marcher puisque sed va prendre le / pour lui alors ça partie de l'expression à remplacer.

  6. #6
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    C'est bien ce que j'essayait de montrer, et meme si tu remplaces les / par des : ou des | cela ne fonctionnera pas

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    pourquoi ne pas utiliser awk ?

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par init
    pourquoi ne pas utiliser awk ?
    Parce que le sujet du thread est "Gérer les espaces avec SED", d'une part. D'autre part, plutôt que de demander "Pour quoi ne pas le faire avec awk ?", il serait plus productif de directement proposer une solution avec awk si tu en connais une, non ?

    Ajout d'un "#" en début de ligne "ident" avec sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/^([[:space:]]*ident[[:space:]].*)$/#\1/' /etc/inetd.conf
    "-r" c'et pour éviter d'avoir à échapper certains caractères (utilisés dans les regex étendues, ici : les parenthèses) car je trouve que "(bla(bla))" est plus lisible que "\(bla\(bla\)\)".
    le "^" c'est pour le début de ligne.
    Le premier "[[:space:]]" c'est au cas où la ligne ne débuterait pas directement par "ident" mais par un ou plusieurs espaces/tabulations. L'étoile c'est pour dire qu'il peut y en avoir n'importe quel nombre y compris 0.
    Le second "[[:space:]]" (pas d'étoile après lui !) c'est pour être sûr de ne pas toucher à des lignes qui commenceraient par d'autres mots commençant par "ident". On ne prend que "ident", pas "identite" ni "identification", ni ...
    ".*" c'est pour dire qu'on prend tout ce qui suit.
    Le "$" à la fin n'est pas vraiment utile ici, c'est juste une habitude que j'ai prise.
    le "\1" c'est pour utiliser le contenu de la première paire de parenthèses.

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

Discussions similaires

  1. garder les espace avec read
    Par gaaara dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 19/04/2014, 00h30
  2. [Batch] prendre en compte les espace avec robocopy
    Par chuspyto dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/02/2014, 16h45
  3. [AC-2003] Comment supprimer les espaces avec mid, left, right
    Par edonis dans le forum VBA Access
    Réponses: 3
    Dernier message: 09/10/2011, 19h05
  4. find et les espaces avec un tableau
    Par lrgtk dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/08/2010, 18h37
  5. Les espaces avec les expressions reguliers
    Par kodo dans le forum Langage
    Réponses: 6
    Dernier message: 01/05/2007, 23h04

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