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

Résolu
eZula Messages postés 3391 Date d'inscription   Statut Contributeur Dernière intervention   -  
eZula Messages postés 3391 Date d'inscription   Statut Contributeur Dernière intervention   -
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 40842 Date d'inscription   Statut Modérateur Dernière intervention   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 3391 Date d'inscription   Statut Contributeur Dernière intervention   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 40842 Date d'inscription   Statut Modérateur Dernière intervention   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 3391 Date d'inscription   Statut Contributeur Dernière intervention   392
 
Parfait, merci !
0