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 :

sed avec copie de blocs


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut sed avec copie de blocs
    Bonjour

    Etant novice sur sed j'ai trouvé une commande qui copie un bloc
    cependant elle ne filtre pas les mots.

    Exemple : J'ai un fichier
    toto tata
    bala bala bala
    toto
    fdqsdf
    titi
    ffdsf
    toto
    titi
    dsq
    fsdf

    lorsque je fais un : sed -n -e '/toto/,/titi/p' fichier
    la commande affiche le bloc jusqu'au dernier titi et non au premier titi
    ya -t-il une option ?

  2. #2
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Dans ton fichier d'exemple, tu as 2 blocs toto..titi. Sed affiche les deux. Tu voudrais quoi ?

    Si tu veux t'arrêter au premier titi, ajoute l'instruction "/titi/q".

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par LLB Voir le message
    Dans ton fichier d'exemple, tu as 2 blocs toto..titi. Sed affiche les deux. Tu voudrais quoi ?

    Si tu veux t'arrêter au premier titi, ajoute l'instruction "/titi/q".
    Je souhaite afficher les 2 blocs toto titi séparemment .

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    toto tata (1)
    bala bala bala
    toto (2)
    fdqsdf
    titi (3)
    ffdsf
    toto (4)
    titi (5)
    dsq
    fsdf

    la commande que tu donnes affiche la séquence (1)-(3) et (4)-(5)

    si j'ai bien compris tu ne t'intéresse qu'aux séquences toto-titi,
    le toto en position (1) ne t'interesse pas car il n'est pas suivi d'un titi
    par contre les séquences (2)-(3) et (4)-(5) t'intéressent.

    j'ai essayé mais j'y arrive pas en sed

    j'utiliserai plutôt awk ou perl pour ça et je mémoriserai un état et un buffer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    awk '
    (flag == 1) { 
                buf = buf "\n" $0
    }
     
    /toto/ {  
         flag=1 
         buf=$0
    } 
     
    /titi/  {
        if (flag == 1)
              print buf
        flag=0  
    }
    ' fichier
    ici awk s'en sort bien mais pour un cas plus complexe avec beaucoup d'états j'utiliserai perl avec un gros "switch"

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par redofr Voir le message
    Je souhaite afficher les 2 blocs toto titi séparemment .
    séparemment, tu veux dire avec une ligne blanche?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -ne '/toto/,/titi/p;/titi/a\    
    ' tonfichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    toto tata 
    bala bala bala 
    toto
    fdqsdf
    titi
     
    toto 
    titi

Discussions similaires

  1. Copie de bloc de mémoire (avec Boost ?) ?
    Par oodini dans le forum C++
    Réponses: 7
    Dernier message: 13/02/2009, 15h26
  2. Mailto avec copie du mail
    Par Poussy-Puce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/04/2006, 17h20
  3. [Tableau]Problèmes avec copie de tableau
    Par Itachi-san dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 17h23
  4. [XSL] problème avec copy espace de nom
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 15h18
  5. quel format doit avoir une BD pour l'importer avec copy?
    Par daknoom dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/02/2005, 19h41

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