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
A voir également:

4 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
[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
eZula Messages postés 3509 Statut Contributeur 392
 
Parfait, merci !
0