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

Résolu/Fermé
eZula Messages postés 3392 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 - 26 mai 2008 à 19:44
eZula Messages postés 3392 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 - 26 mai 2008 à 21:00
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

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 mai 2008 à 20:19
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 3392 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 392
26 mai 2008 à 20:36
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 mai 2008 à 20:43
[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 3392 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 392
26 mai 2008 à 21:00
Parfait, merci !
0