Forum Clubic

Utiliser grep sur plusieurs lignes dans un script bash

Bonjour.

Je présente mon problème. Je dois réaliser un script qui parcours de manière récursive des dossiers où se trouvent des codes sources cplusplus.

Dans ces derniers je dois trouver tous les appels qui sont fait à certaines fonctions données.

Actuellement voilà où j’en suis :

#!/bin/bash

$oldIFS;
oldIFS=IFS;
IFS=$'n'

$maVariable;
maVariable=($(grep -RHn .*getLogsList(.* ./)) #pour trouver toutes les lignes où se trouvent "getLogsList("

len=${#maVariable[*]};	#recupere la taille de maVariable

for (( i=0; i<len; i++ ))
do
	echo ${maVariable[i]};    #affichage permettant de verifier si ça fonctionne
done

IFS=$oldIFS

Le problème étant que lors de certains appels, les arguments sont placés un à un à la ligne. Par exemple :

getLogsList(arg1,
                   arg2,
                   arg3);

Et grep ne me récupère que :

getLogsList(arg1,

Ce qui est assez logique. Ca fait un moment que je cherche une solution et je tourne en rond.

Un petit coup de pouce ? ^^ Je précise que je suis novice en scripting

Merci beaucoup en tous cas
Edité le 05/11/2013 à 17:44

:hello:

Si je ne me trompe pas, tu dois pouvoir utiliser “/n” (sans guillemets) avec grep pour lui faire comprendre qu’il s’agit d’un retour à la ligne.
Edité le 07/11/2013 à 14:43

J’ai essayé d’inclure dans l’expression régulière un “/n” mais il s’applique à la recherche et pas au résultat. A chaque fois il me retourne que la ligne sans prendre la suivante. Je ne sais pas si c’est une limitation de grep ou si il y a quelque chose que je ne saisi pas :S

Personne ne sais comment faire ?
Edité le 12/11/2013 à 10:47

man grep :

c’est pas idéal mais sinon faut passer à awk

le symbole “fin de ligne” pour grep c’est “$”, mais si tu veux le “\n” il faut doubler le backslash
Edité le 10/12/2013 à 20:03