des faux points dans une cha=c3=aene

Le
dadou
Bonsoir la foule,

Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} ; »
et
« find ./ -name "*.tex" -exec grep -l eps {} ; »
trouvent-elles les mêmes choses ?
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

Latextivement,
Didier.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Doug713705
Le #26484763
Le 2018-08-08, dadou nous expliquait dans
fr.comp.os.linux.configuration
(
Bonsoir la foule,
Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} ; »
et
« find ./ -name "*.tex" -exec grep -l eps {} ; »
trouvent-elles les mêmes choses ?

Parce que ton expression .eps est interprété comme une RegEx ?
Le point faisant parti du motif et non pas de l'expression il faut donc
l'échapper et mettre le motif entre quotes.
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;
--
Et nous avions des gueules à briser les miroirs,
À ne montrer nos yeux que dans le contre-jour,
Mais entre deux délires, entre deux idées noires,
Nous étions les plus beaux, nous vivions à rebours.
-- H.F. Thiéfaine, Exil Sur planète fantôme
Nicolas George
Le #26484762
dadou , dans le message
Je retrouve de très vieux fichiers que je compilais avec « latex »
et que je veux faire plus propres et compilables avec « pdflatex ».
Je cherche donc à détecter tous les fichiers contenant la
chaîne « .eps ».
Pourquoi les commandes
« find ./ -name "*.tex" -exec grep -l .eps {} ; »
et
« find ./ -name "*.tex" -exec grep -l eps {} ; »
trouvent-elles les mêmes choses ?

Ce n'est pas le cas : si tu as « epsilon » quelque part dans le fichier,
la seconde commande va le trouver, mais la première ne va le trouver que
s'il n'est pas en début de ligne.
Il me semble que le point de « .eps » n'est pas pris en compte et que
me sont dénoncés des fichiers contenant juste « eps » sans le point
(comme « varepsilon » par exemple).
Savez vous pourquoi, et comment corriger cela ?

Cherche « period » / « point » dans la page de man de grep.
Puis cherche « backslash » et l'option -F.
Et pendant que tu y es, regarde >.
dadou
Le #26484792
Le 08/08/2018 à 15:09, Doug713705 a écrit :
find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;

Right! et je vais voir les lectures que Nicolas G. propose...
Nicolas George
Le #26484791
Doug713705 , dans le message écrit :
find ./ -type f -name "*.tex" -exec grep -l ".eps" {} ;

Attention : un backslash seul dans des guillemets doubles est fragile.
Je conseille, au choix :
"\.eps"
'.eps'
Francois Lafont
Le #26484815
Bonjour,
On 08/08/2018 07:31 PM, Nicolas George wrote:
Attention : un backslash seul dans des guillemets doubles est fragile.
Je conseille, au choix :
"\.eps"
'.eps'

J'ajoute simplement à la remarque de Nicolas que grep possède l'option
--fixed-strings (ou -F en version courte) qui permet à grep d'interpréter
le motif comme une simple chaîne « brute » ou il n'y a plus de notion de
regex. Par exemple :
grep -F '.eps' f.txt
va rechercher la chaîne « .eps » dans le fichier f.txt. Plus de regex, un
caractère représente lui-même, un point c'est tout, et on n'a plus à se
poser la question « faut-il échapper tel ou tel caractère ? ».
À+
--
François Lafont
Poster une réponse
Anonyme