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

Unix Discussion :

expression reguliere, tabulation et debut de ligne


Sujet :

Unix

  1. #1
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut expression reguliere, tabulation et debut de ligne
    Bonjour

    je voudrais supprimer les lignes ne contenant que des commentaires dans mes fichiers ADA.
    sachant qu'un commentaire débute par -- et qu'il peut y avoir des espacements et/ou tabulations avant, j'ai tenté la commande (dans un script tcsh) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat file.a | egrep -v -e '[ \t]*--' > test_tmp
    ce qui marche bien mais me supprime aussi les lignes contenant du code et se terminant par un commentaire.
    j'ai donc essayé la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat file.a | egrep -v -e '^[ \t]*--' > test_tmp
    mais là, les lignes de commentaire précédées de tabulations ne sont plus supprimées, seules celles contenant 0 ou plusieurs espaces en début de ligne et sans tabulation le sont.

    En revanche si je remplace \t par une vrai tabulation, ça marche mais mon script est beaucoup moins lisible du fait de l'invisibilité des caractères espace et tabulation.

    Quelqu'un aurait une idée pour garder à la fois ^ et \t ?
    (Je veux bien utiliser autre chose qu'un grep mais faudrait pas que ce soit trop lourd non plus)

    merci d'avance
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Quelle version de (e)grep as-tu ?

    Pourquoi ????? tout court ne te suffit pas ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    je n'ai pas trouvé la version de grep, si ca peut aider, je me connecte a une machine unix depuis WinXP SP3 via Exceed. la derniere ligne du man grep affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SunOS 5.6           Last change: 12 May 1997
    pour le cat avant c'est plus une habitude que j'ai prise pour facilité la lecture des scripts surtout quand il y a plusieurs commandes à enchainer mais c'est vrai que dans ce cas là c'est pas très utile vu qu'il n'y a qu'un seul grep

    édit 1 : est-ce que quelqu'un peut me dire s'il a le même comportement sur sa machine ?

    édit 2 : je pars ce soir pour 3 semaines de vacances donc ne vous étonnez pas si je fais le mort pendant quelques temps
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Solaris 6... Pas tout recent ca...

    Ceci dit, j'ai le même comportement que toi sur un AIX, et je n'arrive pas a trouver la solution...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    HOURRA !
    j'ai trouvé un moyen détourné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat file | sed -e 's/\([^-]*\)--.*/\1/' > test_tmp
    la différence c'est que ça garde les espaces et tabulations avant le commentaire (mais je m'en fou tant que j'ai plus le commentaire) et ça supprime également les commentaires qui pourrait être placés après le code, en fin de ligne (ce qui est un plus pour moi)

    Par contre :
    dans le cas où il n'y a pas de commentaire, ça ne correspond pas à mon expression régulière et donc il garde toute la ligne -> OK
    dans le cas où il y a du code sans - puis un commentaire, ça correspond à l'expression régulière et donc il garde la 1ere partie (partie code) -> OK
    Mais dans le cas où il y a un signe - dans la partie code, avec commentaire après, ça ne correspond pas à l'expression régulière (puisque j'exclus le - dans la chaine avant le --) mais il me garde quand même uniquement la partie code ->

    d'un coté ça m'arrange mais j'aurai aimé comprendre pourquoi

    en tout cas merci d'avoir cherché avec moi, ça doit être un bug des expression régulières ou du grep
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par straasha Voir le message
    ça doit être un bug des expression régulières ou du grep
    Non, ce n'est pas un bug des expressions régulières ou de grep mais un bug dans ton script car "\t" n'a pas de signification particulière comme expression régulière. Il est donc simplement équivalent à la lettre t.

    Ceci devrait répondre à ton problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat z | egrep -v '^[ '"$(nawk 'BEGIN { printf("%c",9); }')"']*--.*$' > test_tmp
    ɹǝsn *sıɹɐlos*

  7. #7
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    si j'ai parlé de bug des expressions régulières c'est parce que le \t est reconnu dans l'expression régulière : mais pas dans seul le caractère ^ les différencie.
    mais j'ai également trouvé dans mes recherches une doc qui dit que les \ ne sont pas reconnus entre [ ], dans ce cas le bug serait plutôt sur la 1ere expression régulière.
    Mais dans tous les cas, pourquoi cette différence de traitement entre les 2 expressions régulières ?
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Non. Il n'y a pas de différence car "\t" n'est pas reconnu comme une tabulation dans le premier cas non plus. "\t" n'a pas de signification particulière dans la définition des expressions régulières utilisée par egrep et est donc strictement équivalent à "t".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "toto" | egrep "[\t]"
    toto
    ɹǝsn *sıɹɐlos*

  9. #9
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    me voila de retour de vacances (et même marié du coup ) pour clore le sujet vu que j'ai une solution alternative.

    merci à ceux qui ont répondu ainsi qu'à ceux qui ont passé du temps sur mon problème.
    il parait que la plume est plus forte que l'épée, heureusement j'ai une hache

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

Discussions similaires

  1. Expression reguliere sur n lignes
    Par lagdu dans le forum Général Python
    Réponses: 12
    Dernier message: 17/02/2009, 12h18
  2. Réponses: 2
    Dernier message: 13/06/2008, 11h56
  3. [debutant] expressions regulieres
    Par pouss dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2006, 11h52
  4. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 09h45
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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