Récupérer un bloc de texte avec ?GREP

Résolu
eZula Messages postés 3509 Statut Contributeur -  
eZula Messages postés 3509 Statut Contributeur -
Salut,

je cherche une solution pour matcher un bloc de texte avec ?grep. L'obstacle est l'identification du retour chariot. Plus concrètement :

cat j
coucou
hello
bonjour



Il me semble que le retour chariot c'est \n, comment matcher :

coucou
hello


grep 'coucou\nhello' j ne marche pas, pas plus qu'un tas d'autres combinaisons (parenthèses, guillemets, crochets, etc). Est-ce possible avec grep ?

Merci
Configuration: Linux Suse
Firefox 2.0.0.14

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Quelle est la finalité de la demande ?
    Matcher absolument le retour charriot ? Ou matcher un nombre de lignes avant/après le motif ?

    Sinon, essaye ça :
    grep -x coucou$'\n'hello fichier
    ;-))
    0
  2. eZula Messages postés 3509 Statut Contributeur 392
     
    Salut jipicy - merci

    je souhaite récupérer des blocs de texte et les découper (probablement avec sed) s'ils contiennent une expression, ce qui me gênait c'est que dans ces blocs il y a des retours à la ligne

    Ta commande semble fonctionner, je n'ai pas consulté le man et ne connaissais pas l'option -x :

    grep -x coucou$'\n'hello$'\n'bonjour j
    coucou
    hello
    bonjour


    en fait plus précisément, il s'agit de récupérer la ligne au dessus d'une ligne qui contiendrait une expression. Dans cet exemple, le but serait de récupérer la ligne au-dessus de hello ; ou plus loin, récupérer toutes les lignes qui se trouvent au-dessus de toutes les lignes contenant hello (en gras ci-dessous) :

    coucou
    hello
    bonjour
    salut
    hello
    aurevoir
    hello
    byebye
    ciao
    hello


    J'entrevois quelquechose avec grep -n et sed mais qui pourrait être un peu lourd
    j'imagine qu'il y a peut être plus adapté comme commande, mais je voulais déjà savoir comment traiter ces retours chariots avec grep
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [trash]$ cat ezula
    coucou
    hello
    bonjour
    salut
    hello
    aurevoir
    hello
    byebye
    ciao
    hello
    [trash]$ grep -B1 'hello' ezula
    coucou
    hello
    --
    salut
    hello
    aurevoir
    hello
    --
    ciao
    hello
    [trash]$ grep -B1 'hello' ezula | egrep -v '(hello|--)'
    coucou
    salut
    aurevoir
    ciao
    [trash]$
    ;-))
    0
  4. eZula Messages postés 3509 Statut Contributeur 392
     
    Parfait, merci !
    0