OVH Cloud OVH Cloud

grep et performances

5 réponses
Avatar
manu
Bonjour

Pour chercher si la chaine $haystack contient le mot $niddle, on peut
faire ca:

echo $haystack | fgrep -q $niddle && echo yes

Ca lance un fgrep externe. On peut aussi faire ca:

test "x$haystack" != "x${haystack%%${niddle}*}" && echo yes

Qui ne lance aucun processus externe. Mais le traitement qu'on fait
faire au shell est plus lourd. Est-ce que ca vaut le coup d'utiliser la
deuxième forme?

Sinon quelqu'un a une troisième approche?

--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
manu@netbsd.org

5 réponses

Avatar
lhabert
Emmanuel Dreyfus :

test "x$haystack" != "x${haystack%%${niddle}*}" && echo yes

Qui ne lance aucun processus externe.


test n'est pas forcément builtin.

Je pense que le mieux est de faire :

case "$haystack" in
*"$A"*) echo yes ;;
*) ;;
esac

Avatar
Nicolas George
Emmanuel Dreyfus wrote in message
<1hax7hd.bw9wf69uba5eN%:
Pour chercher si la chaine $haystack contient le mot $niddle, on peut
faire ca:


Je n'ai rien à ajouter techniquement à la réponse de Luc, mais j'aimerais
quand même apporter une précision :

C'est « needle », pas « niddle ».

;-)

Avatar
deub
Pour chercher si la chaine $haystack contient le mot $niddle, on peut
faire ca:

echo $haystack | fgrep -q $niddle && echo yes

Ca lance un fgrep externe. On peut aussi faire ca:

test "x$haystack" != "x${haystack%%${niddle}*}" && echo yes



Je propose :

[[ $haystack = *$niddle* ]] && echo yes

Avatar
Stephane Chazelas
2006-02-20, 10:16(+01), deub:

Pour chercher si la chaine $haystack contient le mot $niddle, on peut
faire ca:

echo $haystack | fgrep -q $niddle && echo yes

Ca lance un fgrep externe. On peut aussi faire ca:

test "x$haystack" != "x${haystack%%${niddle}*}" && echo yes



Je propose :

[[ $haystack = *$niddle* ]] && echo yes
[...]


Non,

[[ $haystack = *"$niddle"* ]] && echo yes

may c'est la meme chose en moins portable et non standard que:

case $haystack in *"$niddle"*) echo yes;; esac

--
Stéphane


Avatar
deub
Non,

[[ $haystack = *"$niddle"* ]] && echo yes

may c'est la meme chose en moins portable et non standard que:

case $haystack in *"$niddle"*) echo yes;; esac


Ah tiens ? J'en prend note.