Equivalent de grep, mais multilignes

Le
Kevin Denis
Bonjour,

est-ce qu'il existe un équivalent de grep multilignes?

Grep permet de trouver des motifs dans un fichiers.

J'ai plusieurs motifs à chercher dans un grand nombre de fichiers,
chaque motif faisant entre 5 et 20 lignes.

C'est à dire que j'ai un fichier:

ligne
ligne
autre ligne
123
ligne

Et je souhaite savoir si ce fichier comporte le motif

123
ligne

Bien entendu le fichier suivant ne doit pas correspondre:

ligne
123
autre ligne
ligne

(linux + bash)

Merci
--
Kevin
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane CHAZELAS
Le #19409501
2009-05-25, 13:20(+00), Kevin Denis:
Bonjour,

est-ce qu'il existe un équivalent de grep multilignes?

Grep permet de trouver des motifs dans un fichiers.

J'ai plusieurs motifs à chercher dans un grand nombre de fichiers,
chaque motif faisant entre 5 et 20 lignes.

C'est à dire que j'ai un fichier:

ligne
ligne
autre ligne
123
ligne

Et je souhaite savoir si ce fichier comporte le motif

123
ligne

Bien entendu le fichier suivant ne doit pas correspondre:

ligne
123
autre ligne
ligne

(linux + bash)


[...]

perl -l -0777 -ne 'print $ARGV if /123nligne/' fichier1 fichier2...

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'

--
Stéphane
Kevin Denis
Le #19426561
Le 25-05-2009, Stephane CHAZELAS
est-ce qu'il existe un équivalent de grep multilignes?
Grep permet de trouver des motifs dans un fichiers.
J'ai plusieurs motifs à chercher dans un grand nombre de fichiers,
chaque motif faisant entre 5 et 20 lignes.

(linux + bash)


[...]

perl -l -0777 -ne 'print $ARGV if /123nligne/' fichier1 fichier2...



Je vais laisser perl de côté.

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'



J'ai du mal à comprendre. On affecte à RS la valeur [^-377]. RS
doit signifier Record Separator (je pense?).
Le fait d'affecter une valeur à RS permet d'indiquer comment les
enregistrements sont séparés. Et là, j'ai du mal à saisir
ce que signifie la valeur... (en tout cas, sans celle-ci, cela
ne fonctionne pas).
--
Kevin
Jacques L'helgoualc'h
Le #19427101
Le 25-05-2009, Kevin Denis
Bonjour,



bonjour,

est-ce qu'il existe un équivalent de grep multilignes?

[...] je souhaite savoir si ce fichier comporte le motif

123
ligne



Quelque chose comme ça ?

sed -ne '/123/!d;N;/123.*nligne/p;D'

--
Jacques L'helgoualc'h
Benoit Izac
Le #19428001
Bonjour,

le 27/05/2009 à 17:07, Kevin Denis a écrit dans le message

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'



J'ai du mal à comprendre. On affecte à RS la valeur [^-377]. RS
doit signifier Record Separator (je pense?).
Le fait d'affecter une valeur à RS permet d'indiquer comment les
enregistrements sont séparés. Et là, j'ai du mal à saisir
ce que signifie la valeur... (en tout cas, sans celle-ci, cela
ne fonctionne pas).



Cela signifie que l'on va prendre comme séparateur de champ un caractère
qui n'appartient pas à la fourchette 0 - 377 (en octal). En clair, aucun
caractère. Par conséquence, awk va lire tout le fichier d'un coup et ne
verra qu'une ligne dans laquelle il recherchera le motif.

--
Benoit Izac
Benoit Izac
Le #19428241
Bonjour,

le 27/05/2009 à 17:07, Kevin Denis a écrit dans le message

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'



J'ai du mal à comprendre. On affecte à RS la valeur [^-377]. RS
doit signifier Record Separator (je pense?).
Le fait d'affecter une valeur à RS permet d'indiquer comment les
enregistrements sont séparés. Et là, j'ai du mal à saisir
ce que signifie la valeur... (en tout cas, sans celle-ci, cela
ne fonctionne pas).



Cela signifie que l'on va prendre comme séparateur de champ un caractère
qui n'appartient pas à la fourchette 0 - 377 (en octal). En clair, aucun
caractère. Par conséquence, awk va lire tout le fichier d'un coup et ne
verra qu'un champ dans lequel il recherchera le motif.

--
Benoit Izac
Cyrille Lefevre
Le #19429541
Benoit Izac a écrit :
Bonjour,

le 27/05/2009 à 17:07, Kevin Denis a écrit dans le message

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'



J'ai du mal à comprendre. On affecte à RS la valeur [^-37 7]. RS
doit signifier Record Separator (je pense?).
Le fait d'affecter une valeur à RS permet d'indiquer comment les
enregistrements sont séparés. Et là, j'ai du mal à saisir
ce que signifie la valeur... (en tout cas, sans celle-ci, cela
ne fonctionne pas).



Cela signifie que l'on va prendre comme séparateur de champ un car actère
qui n'appartient pas à la fourchette 0 - 377 (en octal). En clair, aucun
caractère. Par conséquence, awk va lire tout le fichier d'un coup et ne
verra qu'un champ dans lequel il recherchera le motif.




Bonjour,

suis pas sur que ça marche avec autre chose que gnu awk, d'ailleurs :

http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html

INPUT FILES

Whether the variable RS is set to a value other than a <newline> or not,
for these files, implementations shall support records terminated with
the specified separator up to {LINE_MAX} bytes and may support longer
records.

note le LINE_MAX bytes...

autrement dit, cela marche tant que la taille du fichier est < à
LINE_MAX, sinon, peut-être, mais sans certitude...

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Stephane CHAZELAS
Le #19429701
2009-05-27, 22:13(+02), Cyrille Lefevre:
Benoit Izac a écrit :
Bonjour,

le 27/05/2009 à 17:07, Kevin Denis a écrit dans le message

gawk -vRS='[^-377]' '/123nligne/{print FILENAME}'



J'ai du mal à comprendre. On affecte à RS la valeur [^-377]. RS
doit signifier Record Separator (je pense?).
Le fait d'affecter une valeur à RS permet d'indiquer comment les
enregistrements sont séparés. Et là, j'ai du mal à saisir
ce que signifie la valeur... (en tout cas, sans celle-ci, cela
ne fonctionne pas).



Cela signifie que l'on va prendre comme séparateur de champ un caractère
qui n'appartient pas à la fourchette 0 - 377 (en octal). En clair, aucun
caractère. Par conséquence, awk va lire tout le fichier d'un coup et ne
verra qu'un champ dans lequel il recherchera le motif.




Bonjour,

suis pas sur que ça marche avec autre chose que gnu awk, d'ailleurs :


[...]

Oui, c'est d'ailleurs pour ca que j'ai ecrit "gawk" et pas
"awk". La possibilité d'avoir une regexp pour RS est aussi une
extension GNU.

--
Stéphane
Publicité
Poster une réponse
Anonyme