grep multiligne

2002-03-28 Par sujet Salamin Florian

Hello,

Je cherche a récupérer toutes les lignes située entre un motif de départ et
un motif de fin.
Un petit exemple sera plus parlant:

[...]
ENUM SyncENUM {
Entrance = 0,
Exit = 1,
Undefined   = -1,
DoNotChange = -2
};
[...]

Dans cet exemple, je voudrais récupérer tout ce qui se trouve entre ENUM et
};
Je ne m'en sort pas avec l'utilisation de grep, mais peut-être que ce n'est
pas la bonne méthode? Est-ce que grep peut travailler en multiligne ???
Toutes les idées sont les bienvenues :)

Florian

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: grep multiligne

2002-03-28 Par sujet Daniel Cordey

On Thursday 28 March 2002 09:34, Salamin Florian wrote:
 Hello,

 Je cherche a récupérer toutes les lignes située entre un motif de départ et
 un motif de fin.
 Un petit exemple sera plus parlant:

Entre autre :

sed -n '/ENUM/,/};/p' myfile

Ou encore jette un coup d'oeil a csplit(1)

Daniel
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: grep multiligne

2002-03-28 Par sujet Pierre Maitre

Salamin Florian a écrit :

 Dans cet exemple, je voudrais récupérer tout ce qui se trouve entre ENUM et };


Une méthode que j'envisagerais est d'utiliser awk, en précisant que le 
record séparator est le caractère }:

[pierre@station0]$ cat programme.ak
BEGIN   {
RS=}
}
{
if ($0 ~ ENUM){
print $0
}
}

[pierre@station0 pierre]$ awk -f programme.ak fichier
 
 [...]
 ENUM SyncENUM {
 Entrance = 0,
 Exit = 1,
 Undefined   = -1,
 DoNotChange = -2

Peut-être faudra-t-il encore améliorer un peu le programme pour éliminer
les éléments non désirés...


Pierre Maitre



-- 
Dr Pierre-O. Maitre
Privat Docent
FMH Anesthésiologie
FMH Pharmacologie Clinique
Cabinet médical / A la Joy
CH-1273 Genolier   Switzerland
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.



Re: grep multiligne

2002-03-28 Par sujet Jean-Claude Schopfer

 
 [...]
 ENUM SyncENUM {
 Entrance = 0,
 Exit = 1,
 Undefined   = -1,
 DoNotChange = -2
 };
 [...]
 
 Dans cet exemple, je voudrais récupérer tout ce qui se trouve entre ENUM et
 };

La solution de David me parait plus propre, mais pour répondre
à ta question, oui grep est capable de faire du multiligne

exemple : cat $FILE | grep -e $STRING1 -e $STRING2 -e $STRING3

mais sed est meilleur dans le cas que tu soulèves. Sinon, il
reste toujours le bon vieux awk :)

++
JC


http://linux.saitis.net Linux Forum Suisse-Romand


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.